Spring MVC — загрузка файла
В Spring загрузка файла значительно упростилась. Для загрузки одного файла не понадобится почти никаких усилий. В этой заметке будет показан минимальный набор для загрузки одного файла, а здесь рассмотрен более реальный пример загрузки файлов с валидацией.
Самую главную работу будет выполнять следующий бин (подключаем в application-context.xml):
1 2 3 |
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="200000" /> </bean> |
CommonsMultipartResolver — реализует интерфейс MultipartResolver, который использует библиотеку Apache для загрузки файлов через форму. Для использования CommonsMultipartResolver будут необходимы библиотеки commons-io.jar и commons-fileupload.jar
Зависимость для библиотек в maven (прописываются в pom.xml):
1 2 3 4 5 |
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> |
Контроллер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
@Controller public class FileController { private static final Logger logger = LoggerFactory.getLogger(FileController.class); @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) @ResponseBody public String uploadFile(@RequestParam("file") MultipartFile file) {// имена параметров (тут - "file") - из формы JSP. String name = null; if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); name = file.getOriginalFilename(); String rootPath = "C:\\path\\" //try also "C:\path\" File dir = new File(rootPath + File.separator + "loadFiles"); if (!dir.exists()) { dir.mkdirs(); } File uploadedFile = new File(dir.getAbsolutePath() + File.separator + name); BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(uploadedFile)); stream.write(bytes); stream.flush(); stream.close(); logger.info("uploaded: " + uploadedFile.getAbsolutePath()); return "You successfully uploaded file=" + name; } catch (Exception e) { return "You failed to upload " + name + " => " + e.getMessage(); } } else { return "You failed to upload " + name + " because the file was empty."; } } } |
View:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"%> <html> <head> <title>Title</title> </head> <body> <form method="POST" action="uploadFile" enctype="multipart/form-data"> File to upload: <input type="file" name="file"><br /> <input type="submit" value="Upload"> Press here to upload the file! </form> </body> </html> |
Обратите внимание на input type="file" name="file" и такой же параметр в методе public String uploadFile(@RequestParam("file") MultipartFile file) {}
Как только нажимаем на кнопку submit выполнится метод POST с action= «uploadFile», который перехватится котроллером (см. RequestMapping). Файл попадает в объект MultipartFile file и дальше в коде работаем с этим объектом. В данном случае идет простая проверка не пустой ли файл.
Вот так просто можно загружать файлы с помощью Spring MVC. В следующей заметке будет рассмотрен более реальный пример с валидацией и использование паттерна PRG.
92 thoughts on “Spring MVC — загрузка файла”
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Хоть и толком ничего не написанно, но помогло навести в правильное русло
Если убрать multipartResolver, то все работает. Спасибо.