Рядом с предыдущей статьей:
2. Загрузка и загрузку файла
Три хитрости, разработанные Struts2, Page JSP - Configuration File Struts2.xml - и действие класса действия
Загрузка файла Загрузка необходимо:
Метод формы должен быть
Enctype формы должна быть многопорт/форм-даты
Предоставьте поле ввода загрузки типа = "Файл"
Некоторые правила поддержки стойки для загрузки файлов
1. Загрузка единого файла
Шаги развития:
1) Добавить Commons-FileUpload-1.2.1.jar и Commons-IO-I-1.3.2.Jar в соответствии с Web-Inf/Lib. Эти два файла можно загрузить с http://commons.apache.org/
2) Шаг 2: Записать upfile.jsp и установить Enctype таблицы форм: «Multipart/Form-Data», следующим образом:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <body> <s: actionerror/> <hr/> <s: fielderror> </s: fielderror> <форма action = "$ {pagecontext.request.contextPath} /upload1.action" method = "post" enctype = "Multipart/form-data"> <!-Прохождение MIME-> Имя пользователя: <input Type = "text" name = "username"/> <br/> красивые фотографии: <input = "name" name = "/> <br/> <brbr/> <peaky inpect =" за value = "upload"/> </form> </body>Страница ошибки записи ошибка. JSP
<body> Сервер занят, попробуйте еще раз через некоторое время. </body>
Успех.jsp
<body> Загрузка успешно </body>
3) Написать uploadAction1 класс: добавить атрибуты в класс действий, а атрибуты соответствуют имени поля файла в форме:
пакет com.itheima.actions; import java.io.file; import java.io.ioexception; импорт org.apache.commons.io.fileutils; импорт org.apache.struts2 Private File Photo; // Согласно имени поля загрузки формы. Тип - тип файла private String photoFilename; // upload file name private String photoContentType; // Загрузить файл mime type // Опустить методы Getter и Setter public String upload () {System.out.println (photoFileName+":"+photoContentType); // обычное поле: System.out.println (имя пользователя); // Загрузить поле: Загрузите в папку. Сохранить его в Строка каталога изображений приложения realPath = ServletActionContext.getServletContext (). GetRealPath ("/images"); File Directory = новый файл (RealPath); if (! Directory.exists ()) {Directory.mkdirs (); } try {fileUtils.copyfile (фото, новый файл (каталог, фотофилена)); вернуть успех; } catch (ioException e) {e.printstackTrace (); вернуть ошибку; }}}Добавьте следующую конфигурацию в файл struts.xml
<имя действия = "upload1" method = "upload"> <receptor-ref name = "defaultstack"> <param name = "fileupload.allowedtypes"> image/jpeg, image/png </param> <parame name = "fileupload.allowedextensionset"> jpg, jpeg, png </paramupload. <result> /success.jsp </result> <result name = "error">/error.jsp </result> <name = "input">/index.jsp </result> </action>
Принцип анализа:
а Перехватчик FileUpload отвечает за операции загрузки файлов. Это член стека перехватчиков по умолчанию по умолчанию. Перехватчик имеет 3 свойства, которые могут быть установлены.
• MaximumSize: максимальная длина загруженного файла (в байтах), значение по умолчанию составляет 2 МБ.
• AllTyPES: типы, которые позволяют загружать файлы, разделенные запятыми.
• Разрешение. Эти 3 свойства могут быть перезаписаны в файле struts.xml путем просмотра запятой каждое расширение.
беременный Загрузка файлов, которые превышают размер или незаконно, приведет к ошибке (обратитесь к представлению ввода)
проходить:
<S: ActionError/> <S: Feilderror/> Tip для отображения сообщения об ошибке
в Измените подсказку сообщения об ошибке на китайскую версию: с помощью файлов ресурсов международных сообщений
Если ошибка вызвана настройкой глобальных параметров по умолчанию, лучше всего использовать глобальный файл ресурса сообщений.
Файл ресурса по умолчанию для struts2: struts-message.properties файл struts2-core-**. Jar. Просто сравните значение ключа, чтобы перезаписать соответствующее значение.
Конфигурация заключается в следующем:
struts.messages.error.uploading = ошибка загрузка: {0}
struts.messages.error.file.too.large = файл слишком большой: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = content-type не разрешен: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = расширение файла не разрешено: {0} "{1}" "{2}" {3}
{0}: значение атрибута имени в <input type = "file" name = "uploadimage">
{1}: настоящее имя загруженного файла
{2}: имя файла загрузки, сохраненное во временное каталог
{3}: тип загруженного файла (для struts.messages.error.file.too.large - это размер загруженного файла)
Исходный код:
Измените информацию файла ресурса, который отображает ошибку
Шаг 1: Создайте новый файл ресурса, такой как FileUploadMessage.properties, поместите его в SRC, чтобы добавить следующую информацию в файл ресурса
struts.messages.error.uploading = ошибка загрузки: {0}
struts.messages.error.file.too.large = upload File слишком велик: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = тип загруженного файла не допускается: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = Имя суффикса загруженного файла не разрешено: {0} "{1}" "{2}" {3}
Шаг 2: Загрузите файл ресурса в файл struts.xml
<!-Настройте файл ресурса для получения ошибки информации о загрузке файлов->
<constant name = "struts.custom.i18n.resources" value = "cn… .xxx.fileuploadmessage"/>
2. Загрузить несколько файлов
Загрузите несколько файлов, вы можете использовать массивы или списки, а другие аналогичны загрузке отдельных файлов.
пакет com.itheima.actions; import java.io.file; импорт java.io.ioexception; импорт org.apache.commons.io.fileutils; импорт org.apache.struts2 Private File [] Photo; // Подлинен с именем поля загрузки формы. Тип IS file type.Array или список частной строки [] photoFilename; // upload file name private string [] photoContentType; // Загрузить файл файл тип mime public string upload () {// Поле загрузки: загрузить в папку. Сохранить его в Строка каталога изображений приложения realPath = ServletActionContext.getServletContext (). GetRealPath ("/images"); File Directory = новый файл (RealPath); if (! Directory.exists ()) {Directory.mkdirs (); } try {for (int i = 0; i <photo.length; i ++) {fileutils.copyfile (photo [i], новый файл (каталог, фотофиллена [i])); } вернуть успех; } catch (ioException e) {e.printstackTrace (); вернуть ошибку; }}}3. Скачать файл
Принцип: Struts2 предоставляет тип результата потока, который представляет собой указанный тип результата потока, специально используемый для поддержки функции загрузки файлов. Требуется указанный параметр inputName. Этот параметр указывает поток ввода и предоставляет запись в загруженный файл.
Шаги кодирования:
1) Загрузка класса действия:
пакет com.itheima.actions; импорт java.io.file; import java.io.fileinputstream; импорт java.io.filenotfoundexception; импорт java.io.inputstream; импорт java.net.urlencoder; импорт org.apache.commons.io.filenameutils; import org.Age. com.opensymphony.xwork2.actionsupport; public class downloadaction extends actionsupport {private inputstream image; // Использование в частном имене строкости с проблемой; // имя файла private long fileSize; public inputstream getImage () {return image; } public void setimage (image inputStream) {this.image = image; } public String getFilEname () {return filename; } public long getFilesize () {return FileSize; } public String скачать () throws Exception {// Присвоение значению изображения Byte String String fileerealPath = ServletactionContext.getServletContext (). getRealPath ("/web-inf/classes/如 .jpg"); filename = filenameutils.getname (fileerealpath); // Метод 1: Китайский файл должен быть кодирован URL // filename = urlencoder.encode (имя файла, "UTF-8"); FileSize = новый файл (FileRealPath) .length (); System.out.println (имя файла); Image = new FileInputStream (FileRealPath); вернуть успех; }}Файл конфигурации struts.xml: в основном настройка результатов типа потока
<struts> <constant name = "struts.devmode" value = "true" /> <constant name = "struts.ognl.allowstaticmethodaccess" value = "true" /> <name = "Скачать" метод = "Скачать"> <result type = "stream"> <param name = "input-name"> Изображение < /param> <! inputStream-> <param name = "contentType"> Приложение/Octet-Stream </param> <!-Расскажите заголовок ответа браузера, формат MIME файла и вызовите метод GetContentType в действии-> <!-Используйте выражение ognl в struts.xml, чтобы получить значение свойства в классе действий. Call getFilename () в классе действий-> <!-Китайское имя файла Кодирование: Метод 2. Используйте экспрессию ognl, чтобы вызвать статический метод Urlencode-> <!-По умолчанию вызовы ognl. Статические методы не могут быть сделаны. Вам необходимо включить постоянный switch.struts.ognl.allowstaticmethodaccess = true-> <param name = "contentdisposition"> Attachment; filename = $ {@java.net.urlencoder@encode (fileename, 'utf-8')} </param> <!-рассказывать о том, как скачать-> <param-name = "}} </param> <!-рассказывать о том, как скачать-> <param-name ="> $ "} </param> <! </result> </action> </package> </struts> Перехватчик и загрузка файлов заканчиваются здесь. Это так утомительно, но полно достижений.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.