@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024,
maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Поддержка загрузки файлов является весьма распространённым требованием для многих веб-приложений. В предыдущих версиях спецификации сервлета для загрузки файлов требовалось использование внешних библиотек или сложной обработки ввода. Спецификация сервлета Java теперь обеспечивает жизнеспособное решение проблемы в общем и переносимом виде. Технология Java Servlet теперь поддерживает загрузку файлов "из коробки", поэтому любой веб-контейнер, реализующий спецификацию, может анализировать многочастные (multipart) запросы и делать вложения mime доступными через объект HttpServletRequest
.
Новая аннотация javax.servlet.annotation.MultipartConfig
указывает, что сервлет, аннотированный ею, ожидает выполнения запросов с использованием типа MIME multipart/form-data
. Сервлеты, аннотированные @MultipartConfig
, могут извлечь объекты Part
данного запроса multipart/form-data
, вызвав запрос request.getPart(String name)
или request.getParts()
.
Аннотация @MultipartConfig
поддерживает следующие необязательные атрибуты.
location
: абсолютный путь к каталогу в файловой системе. Атрибут location
не поддерживает путь относительно контекста приложения. Это расположение используется для врéменного хранения файлов во время обработки деталей или когда размер файла превышает заданный параметр fileSizeThreshold
. Расположение по умолчанию: ""
.
fileSizeThreshold
: размер файла в байтах, после которого файл будет временно сохранён на диске. Размер по умолчанию составляет 0 байт.
MaxFileSize
: максимально допустимый размер загружаемых файлов в байтах. Если размер любого загруженного файла больше этого размера, веб-контейнер выдаст исключение (IllegalStateException
). Размер по умолчанию не ограничен.
maxRequestSize
: максимальный размер, разрешённый для запроса multipart/form-data
, в байтах. Веб-контейнер выдаст исключение, если общий размер всех загруженных файлов превысит этот порог. Размер по умолчанию не ограничен.
Например, аннотация @MultipartConfig
может быть построена следующим образом:
@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024,
maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
Вместо использования аннотации @MultipartConfig
для жёсткого кодирования (hard-code) этих атрибутов в вашем сервлете загрузки файлов, вы можете добавить следующее как дочерний элемент элемента конфигурации сервлета в файл web.xml
:
<multipart-config>
<location>/tmp</location>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
Спецификация сервлета поддерживает два дополнительных метода HttpServletRequest
:
Collection<Part> getParts()
Part getPart(String name)
Метод request.getParts()
возвращает коллекции всех объектов Part
. Если у вас на странице есть более одного элемента ввода файла, возвращается несколько объектов Part
. Поскольку объекты Part
имеют имена, метод getPart(String name)
можно использовать для доступа к определённому Part
. Кроме того, метод getParts()
, который возвращает Iterable<Part>
, может использоваться для получения Iterator
по всем объектам Part
.
Интерфейс javax.servlet.http.Part
прост и предоставляет методы, которые позволяют выполнять внутренний анализ каждого Part
. Методы позволяют делать следующее:
получить имя, размер и тип содержимого для Part
;
запросить заголовки, отправленные с Part
;
удалить Part
;
записать Part
на диск.
Например, интерфейс Part
предоставляет метод write(String filename)
для записи файла с указанным именем. Затем файл можно сохранить в каталоге, указанном с помощью атрибута location
аннотации @MultipartConfig
или, в случае fileupload
, в месте, указанном в поле «Назначение» формы.
Назад | Вперёд | Содержание |