Напишите впереди
Когда дело доходит до загрузки файлов, мы должны сначала поговорить о бизнес -логике. Если каждый может увидеть загруженные файлы (такие как рекламные объявления или баннеры на домашней странице), мы размещаем изображение в статическую зону ресурса (то же место, что и CSS и JS). Если файл защищен (например, пользователь может просматривать только фотографии, загруженные самими собой), мы храним его в месте на сервере, где изображения специально хранятся.
В этом примере показан метод загрузки файлов, хранящихся в двух местах. После загрузки, в качестве расширения, также добавлена функция просмотра загруженных файлов и загрузки загруженных файлов.
Подготовка
Настроить пакеты SpringMVC и Import Commons
Настройка анализатора загрузки файлов в mvc-servlet.xml
<!-Расположенный файл Parser-> <bean id = "MultipResolver"> <name = "maxUploadSize" value = "1000000"/> <name = "defaultEncoding" value = "utf-8"/> </bean>
Хранятся в статических областях ресурсов
1. Место хранения:
Хранится в проекте, поэтому путь - это путь относительно проекта.
/{yourproject}/webapp/static/img
2. Настройте ответный обработчик
@Controllerpublic class uploadcontroller {@getmapping ("/upload") public String uploadhandler () {return "upload"; } @Postmapping ("/upload/static") public void writostatic (httpservletrequest, redirectattributes redirectattributes, @requestparam ("filename") multipartfile file) {if (! "static/img/"; // Получить имя исходного файла загружено пользовательским файлом string = file.getoriginalfilename (); // Создать новый файл файла файла 1 = новый файл (path, filename); // написать файл в файл. Transferto (file1); redirectattributes.addflashattribute («Сообщение», «Загрузить в статический успех»); вернуть "redirect:/upload"; } else {redirectattributes.addflashattribute ("message", "upload file не может быть пустым"); вернуть "redirect:/upload"; }}}Хранить на сервере
1. Место хранения этого примера:
Хранится в определенном месте на сервере, не имеет ничего общего с проектом, поэтому адрес является абсолютным путем.
/Users/mac/desktop/imgtemp/, абсолютный путь к каталогу.
2. Настройте ответный обработчик
... @postmapping ("/upload/disk") public String writeToDisk (httpservlectrequest, @RequestParam ("filename") MultiplaWfile файл, redirectattributes redirectattributes) {if (! File.isempty ()) {// Получить исходный файл string string string string string string. // Получить сохранение пути папки файла path = "/users/mac/desktop/imgtemp/"; // Создать новый файл файла файла 1 = новый файл (path, filename); // write file file.transferto (file1); }} ...Расширенная часть (просмотр и загрузка файлов)
Поскольку ответ состоит в том, чтобы передать файл в форме потока, нам нужно правильно установить тип ответа Mimie, чтобы быть правильно проанализированным браузером. По умолчанию тип Mimie файла приложения-приложение/октет-поток. После того, как MIME установит это значение, браузер не будет автоматически выполнять или не будет просить выполнять такие файлы и будет напрямую загружать файл в локальную область в виде обработки вложений.
Для получения дополнительной интерпретации Мими, пожалуйста, проверьте эту статью
Если мы хотим настроить имя файла загрузки, нам нужно установить сообщение о дискуссии контента.
Дисплава контента Заголовок сообщения указывает на отображение формы ответа, будь то встроенный (то есть веб-страница или часть страницы), или загружается и сохраняется локально в форме прикрепления.
Для получения дополнительной информации о дискуссии контента, пожалуйста, проверьте эту статью
...@getMapping ("/download/bydefault") public void getimgbydefault (@RequestParam String FileName, @RequestParam (обязательный = false, defaultValue = "") String Savename), httpservletresponse response {if stringUtils.isempty (filename)) {response.senderr (404); возвращаться; } // Путь строки хранилища файла = "/users/mac/desktop/imgtemp/"; // новый файл файла файла = новый файл (path, filename); if (! file.exists ()) {response.senderror (404); возвращаться; } // Если параметр запроса Savename не пуст, загрузите файл if (! StringUtils.isempty (savename)) {// Установите response response.seplontentlength ((int) file.length ()); // Установите тип MIME ответа на Application/Octet-Stream Recason.setContentType (mediaType.application_octet_stream_value); SAVENAME = new String (SAVENAME.GETBYTES ("UTF-8"), "ISO8859-1"); // установить контент-динамичность в привязанность; filename = savename response.setheader (httphaders.content_disposition, "Attachment; filename =/" "+savename+"/""); } // Читать файл inputstream is = new FileInputStream (file); OutputStream OS = response.getOutputStream (); // выходной файл ioutils.copy (is, os); os.flush (); os.close (); is.close ();}Мы также можем использовать конвертер BytearrayhttpmessageConverter, который поставляется с SpringMVC для выходных файлов, который реализует интерфейс httpmessageConverter. Вся информация о запросах MIME может быть прочитана, а MIME информации о ответе-приложение/окте
...@getmapping ("/download/byconvert") public httpentity <byte []> getimgbyconvert (@requestparam String FileName, @RequestParam (обязательный = false, defaultValue = "") String Savename) {if (stringUtils.isempty (fileName)) {return newsement <> (httpTATSIND_SEMPTY (fileName)) {return new Reclection <> (httpTus); } String path = "/users/mac/desktop/imgtemp/"; File file = new File (path, filename); if (! file.exists ()) {return new RecplionEntity <> (httpstatus.not_found); } Httpheaders Headers = new httpheaders (); if (! stringutils.isempty (savename)) {headers.setContentType (mediaType.application_octet_stream_value); headers.setContentLength (file.length ()); SAVENAME = новый Sting (SAVENAME.GETBYTES ("UTF-8"), "ISO8859-1"); headers.add (httphaders.content_disposition, "Attachment; filename =/" " + savename +"/""); } else {headers.setContentType (mediaType.image_png); } вернуть новый httpentity <> (filecopyutils.copytobytearray (file), заголовки);}upload.jsp
<%@ page contentype = "text/html; charset = utf-8" language = "java"%> <%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> <! Doctype html> <html> <head> <meta charset = "utf-8"> <meta name = "viewport" content = "width = width-width, user-scallable = no, первоначальный Scale = 1,0, максимум = 1.0, минимальный том. http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="/static/bootstrap-3.3.5-dist/css/bootstrap.css" rel="external nofollow" ></head><body><div> <h1>Upload file scatter</h1> <c:if test = "$ {не пустое сообщение}"> <h2> $ {сообщение} </h2> </c: if> <form: form ectype = "Multipart/form-data" action = "/upload/static"> <p> upload to/web/static </p> <label for = "> upload file: </label> <input type =" file-name = "upile? <tood> отправить </button> </form: form> <form: form ectype = "multipart/form-data" action = "/upload/disk"> <p> upload на диск </p> <label for = ""> upload file </label> <input = file "name =" uploadfile "> <Tupport> </butter href = "/загрузка/bydefault? filename = dubbo.png" rel = "extrallolow" target = "_ blank"> Используйте метод по умолчанию, чтобы просмотреть изображения dubbo, загруженные на диск </a> </button> <tutry> <a href = "/загрузка/bydefault? filename = dubbo.pg & savenam Метод по умолчанию для загрузки Dubbo Images </a> </button> </div> <div> <tutry> <a href = "/загрузка/byconvert? filename = dubbo.png" rel = "внешний nofollow"> используйте метод по умолчанию для загрузки dubbo images </a> </button> </div> <div> <toolce> <href = "/byconame? rel = "внешний nofollow" target = "_ blank"> используйте MVC Converter для просмотра Dubbo изображения, загруженные на диск </a> </button> <tood> <a href = "/скачать/byconvert? filename = dubbo.png & savename = dub.png" rel = "fillownam </div> </div> </body> </html>Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.