Загрузка файлов — один из часто используемых сценариев в Интернете, наиболее типичная ситуация — загрузка аватаров и т. д. Сегодня я предлагаю вам небольшой пример загрузки файлов в Spring Boot.
1, конфигурация пакета pom
Мы используем последнюю версию Spring Boot 1.5.9, jdk 1.8, tomcat8.0.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
представилspring-boot-starter-thymeleaf
Станьте движком шаблонов страниц и напишите несколько простых примеров загрузки.
2. Настройки стартового класса
@SpringBootApplication
public class FileUploadWebApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(FileUploadWebApplication.class, args);
}
//Tomcat large file upload connection reset
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 means unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}
}
Этот код tomcatEmbedded предназначен для решения проблемы сброса соединения, когда загруженный файл превышает 10M. Содержимое этого исключения GlobalException также не может быть перехвачено.
Для получения подробной информации см.:Tomcat large file upload connection reset
3. Напишите главную страницу
загрузить страницу
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<h1>Spring Boot file upload example</h1>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" /><br/><br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
Очень простой запрос на публикацию, поле выбора для выбора файла и кнопка отправки, эффект выглядит следующим образом:
Загрузить страницу отображения результатов:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<h1>Spring Boot - Upload Status</h1>
<div th:if="${message}">
<h2 th:text="${message}"/>
</div>
</body>
</html>
Схема эффекта выглядит следующим образом:
4. Напишите класс управления загрузкой
Посетите localhost, чтобы автоматически перейти на страницу загрузки:
@GetMapping("/")
public String index() {
return "upload";
}
Загрузить бизнес-обработку
@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
return "redirect:uploadStatus";
}
try {
// Get the file and save it somewhere
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded '" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/uploadStatus";
}
Приведенный выше код означает, чтоMultipartFile
Прочитайте информацию о файле, если файл пуст, перейдите на страницу результатов и дайте подсказку; если он не пуст, прочитайте поток файлов и запишите его в указанный каталог и, наконец, отобразите результат на странице.
MultipartFile
Это класс инкапсуляции для файлов, загруженных Spring. Он содержит такую информацию, как двоичный поток и атрибуты файла файла. Связанные атрибуты также можно настроить в файле конфигурации. Основная информация о конфигурации выглядит следующим образом:
-
spring.http.multipart.enabled=true
#Поддержка загрузки файлов по умолчанию. -
spring.http.multipart.file-size-threshold=0
#Поддержка записи файлов на диск. -
spring.http.multipart.location=
# Временный каталог для загрузки файлов -
spring.http.multipart.max-file-size=1Mb
# Максимально поддерживаемый размер файла -
spring.http.multipart.max-request-size=10Mb
# Максимально поддерживаемый размер запроса
Наиболее часто используются последние два содержимого конфигурации, которые ограничивают размер загружаемого файла.Когда загрузка превышает размер, будет выдано исключение:
Дополнительную информацию о конфигурации можно найти здесь:Common application properties
5. Обработка исключений
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MultipartException.class)
public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());
return "redirect:/uploadStatus";
}
}
установить один@ControllerAdvice
контролироватьMultipart
Независимо от того, ограничен ли размер загружаемого файла, при возникновении этого исключения на странице внешнего интерфейса будет отображаться подсказка. использовать@ControllerAdvice
Есть много вещей, которые можно сделать, например, глобальная унифицированная обработка исключений и т. д. Заинтересованные студенты могут разобраться.
6. Резюме
Такая простая демонстрация с использованием Spring Boot для загрузки файлов завершена Заинтересованные студенты могут скачать пример кода и попробовать его.
Ссылаться на: