Предисловие
При разработке веб -приложений мы должны предоставить пользователям функции загрузки, такие как загрузка изображения в качестве аватара. Чтобы загрузить файлы, мы должны установить метод формы для публикации, а Enctype- multipart/form-data . Только в этом случае браузер отправит двоичные данные выбранного пользователя на сервер. Эта статья даст подробное резюме функции загрузки в структуре Struts2. Я не скажу многое ниже, давайте посмотрим на подробное введение вместе.
Загрузка файла struts2
Struts2 не предоставляет свой собственный анализатор запроса, то есть Struts2 не будет обрабатывать Multipart/Form-Data самостоятельно. Он должен вызвать другие структуры загрузки, чтобы анализировать данные двоичных запросов, но Struts2 дополнительно инкапсулирует исходный анализатор загрузки, дополнительно упрощая загрузку файлов.
В файле конфигурации default.properties .
### Parser для обработки запросов HTTP Post, кодируется с использованием MIME-типа Multipart/Form-Data# struts.multipart.parser = cos# struts.multipart.parser = pell# struts.multipart.parser = jakarta-streamstruts.multipart.parser = jakarta.parser = jakarta-streamstruts.multipart.parser = jakarta.parser = jakarta-streamstruts.multipart.parser = jakarta.parser = jakarta-streamstruts. defaulttruts.multipart.savedir = struts.multipart.maxsize = 2097152
Приведенный выше код в основном используется для настройки анализатора загрузки при загрузке файлов в Struts2. Инкапсуляция Struts2 изолирует разницу между базовыми компонентами загрузки файла. Пока Resolver используется для загрузки этого файла конфигурации, разработчики могут легко переключаться между различными структурами загрузки файлов.
Struts2 использует диапазон Jakarta загружать анализатор по умолчанию, конечно, если вам это не нравится, вы также можете переключиться на что -то другое. Ниже приведена простая функция загрузки файла, основанная на Struts2 через код.
Реализовать действие загрузки файлов
Страница стойки регистрации:
<form action = "upload" method = "post" enctype = "multiplat/form-data"> title: <input type = "text" name = "title"> <br> файл: <input type = "file" name = "upload"> <br> <input type = "upport" value = "upe"> </form>
Действие класс:
открытый класс uploadAction расширяет ActionSupport {Private String Title; Загрузка частного файла; Private String uploadContentType; Private String uploadfilename; Private String SavePath; public void setSavePath (строковое значение) {this.savepath = value; } private String getavePath () {string realPath = ServletActionContext.getServletContext (). getRealPath ("/web-inf/" + savePath); вернуть RealPath; } public void settitle (строковое значение) {this.title = value; } public String getTitle () {return title; } public void setUpload (значение файла) {this.Upload = value; } public file getUpload () {return upload; } public void setUploadContentType (string value) {this.UploadContentType = value; } public String getFileContentType () {return uploadContentType; } public void setUploadFilEname (string value) {this.uploadFilename = value; } public String getUploadFilename () {return uploadfilename; } @Override public String execute () throws exception {fileOutputStream fos = new FileOutputStream (getSavePath () + "//" + getUploadFilename ()); FileInputStream fis = new FileInputStream (getUpload ()); Byte [] buffer = новый байт [1024]; int len = 0; while ((len = fis.read (buffer))> 0) {fos.write (buffer, 0, len); } fis.close (); fos.close (); вернуть успех; }}Struts.xml файл конфигурации:
<package name = "upload" extends = "struts-default"> <name = "upload"> <param name = "savePath">/upload </param> <name = "success">/success.jsp </result> <result name = "input">/index.jsp </result> </action> </package> <result name = ">/index.jsp </result> </action> </package>
Для класса действия включены два специальных свойства:
Эти два атрибута используются для инкапсуляции имени файла загруженного файла и типа файла загруженного файла. Для Struts2, если форма формы содержит поле файла с атрибутом имени xxx, соответствующее действие должно использовать три атрибута для инкапсуляции информации поля файла:
В процессе разработки выше, мы видим, что это действительно простая вещь для загрузки файлов через Struts2. Что нам нужно сделать, так это связать домен файла со свойством файла типа в действии, чтобы мы могли легко получить доступ к содержанию файла загруженного файла. Что касается того, как Struts2 использует многотатарный анализатор, он полностью прозрачен для разработчиков.
Вручную реализовать фильтрацию файлов
Много раз веб -приложения не позволяют пользователям бесплатно загружать. Нам нужно ограничить тип файла и размер файла, загруженные пользователями, поэтому фильтрация файлов должна выполняться при загрузке файла. Теперь мы вручную реализуем фильтрацию файлов загрузки.
Настройте новый параметр в struts.xml, чтобы указать поддерживаемый тип загрузки:
<param name = "allucttypes"> image/png, image/gif, image/jpeg </param>
Добавьте функцию проверки в действие:
// проверка @OverridePublic void validate () {String filterResult = FilterType (gathallingTypes (). Split (",")); if (filterResult! = null) {addFielderRor ("upload", "Тип файла, который вы хотите загрузить, неверен!"); }} public String filterType (String [] types) {string fileType = getFileContentType (); для (тип строки: types) {if (type.equals (filetype)) {return null; }} return error;} Это просто реализует суждение типа, а затем реализует проверку размера, основанную на методе length() класса файла. Но это так хлопотно, давайте поговорим о более простом заявлении.
Interceptor реализует фильтрацию файлов
Struts2 предоставляет перехватчик для загрузки файлов, а фильтрация файлов может быть легче достичь путем настройки перехватчика. FileUpload загрузки файлов в Struts2. Чтобы перехватчик работал, вам нужно только настроить ссылку на перехватчик в действии.
При настройке перехватчика FileUpload вы можете указать два параметра для него:
<!-Configure FileUpload Interceptor-> <receptor-ref name = "fileupload"> <param name = "AltingTypes"> Image/PNG, Image/GIF, Image/JPEG </param> <param name = "maximumsize"> 20000000 </param> </refceptor-ref> <!-конфигурация SystemSize Interceptor-> </refceptor-ref> <! /> <Результат name = "Успех">/успех.jsp </result>
Таким образом, может быть сделана изменение конфигурации, что действительно намного проще, чем написание куска кода.
Сообщение об ошибке конфигурации
Для ошибок загрузки система по умолчанию будет предлагать сообщения об ошибках английского. Однако для того, чтобы вывести международные сообщения о приглашении, необходимо добавить следующие два определения ключевых сообщений в файл конфигурации международного ресурса:
struts.messages.error.content.type.not.allowed = тип файла загрузки неверен, пожалуйста, загрузите еще разstruts.messages.error.file.too.large = загруженный вами файл слишком большой, пожалуйста, загрузите его сноваДалее вы можете использовать <S: Fielderror/> для вывода сообщения об ошибке.
Постоянная конфигурация для загрузки файлов
В начале статьи мы говорим о конфигурации struts.multipart.saveDir default.properties . Итак, какова конкретная функция этого элемента конфигурации?
Во время процесса загрузки файлов Struts2 необходимо указать временную папку для хранения временных файлов, сгенерированных в процессе загрузки; Если не указана временная папка, система по умолчанию по умолчанию использует javax.servlet.context.tempdir , под работой/Catalina/Localhost/Path под пути установки Tomcat. И это struts.multipart.savedir настраивает место хранения временных файлов. Поэтому в процессе разработки вы должны обратить внимание на то, прочитал ли каталог разрешения.
Существует также конфигурация struts.multipart.maxSize , которая представляет размер загруженного файла. Если свойство максимального размера этой конфигурации и свойство максимального размера перехватчика FileUpload указаны одновременно, оно сначала сравнится с свойством максимального размера конфигурации struts.multipart.maxSize , а затем сравнится с свойством максимального размера перехватчика FileUpload. Если размер файла превышает конфигурацию максимального размера struts.multipart.maxSize , появится исключение, и результат не будет передаваться на вход. Обязательно обратите на это внимание.
Суммировать
В этой статье подробно описано загрузка файлов в Struts2. Есть много содержимого, в основном все содержимое в руководстве. Ну, просто используйте его как руководство.
Хорошо, вышеупомянутое содержимое этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.