Давайте впервые поговорим о принципах загрузки и загрузки реализации экземпляра Struts2:
Struts 2 загружается через файл Commons FileUpload.
Commons FileUpload использует перехватчик FileUpload для привязки файла с экземпляром действия, сохранения данных HTTP во временной папке, а затем Struts использует перехватчик FileUpload. Таким образом, мы можем использовать файлы, загружаемые браузером в локальном манере.
Конкретная реализация :
1. Создать страницу index.jsp
<body> <s:form action="upload" method="post" theme="simple" enctype="multipart/form-data"><table align="center"><tr> <td>Select upload file</td> <td id="more"> <s:file name="file"></s:file> <input type="button" value="Add More.." onclick="addMore()"> </td> </tr> <tr> <td> <s: propect type = "button" value = "Onclick =" return checkf () "/> </td> <td> <s: reset value =" reset "> </s: reset> </td> </tr> </table> <table align =" center "> <tr> <td> test.txt.txt.txt </td> href = "<s: url value = 'Загрузить
Создать страницу result.jsp
<body> <s: форма> <div style = "border: 1px solid black"> Файл Загружену успешно: <br> <ul style = "list-style-type: decimal"> <s: итератор value = "#request.filename" id = "file" = "Статус"> <s> <s: property/> </li> </s: iderator> </spodator> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport> </sport>
Конечно, не забудьте добавить ссылку на теги Struts2 на каждой странице < %@taglib prefix = "s" uri = "/struts-tags" %>
2. Создайте файл uppernown.js и ссылайтесь на его index.jsp
function checkf () {var files = document.getElementsbyname ("file"); if (files [0] .value.length! = 0) {return true; } else {alert ("Пожалуйста, выберите File"); вернуть ложь; }} function addmore () {var td = document.getElementById ("More"); var br = document.createElement ("br"); var input = document.createElement ("input"); var button = document.createElement ("input"); input.type = "file"; input.name = "file"; button.type = "button"; Button.value = "Удалить"; button.onclick = function () {td.RemoveChild (br); Td.RemoveChild (вход); Td.RemoveChild (Button); } td.appendchild (br); td.appendchild (вход); Td.appendChild (кнопка); } 3. Создать UpdownLoadAction.java
пакет com.action; импорт java.io.file; import java.io.fileinputstream; импорт java.io.filenotfoundexception; import java.io.fileOutputStream; import java.io.inputStream; import java.io.OutputStream; import java.UnsUpportEdencodingExcepctex; javax.servlet.http.httpservletrequest; import com.opensymphony.xwork2 Private List <file> file; // Соответствует тегам файлов в частном списке JSP <String> fileFilEname; // Private List <string> fileContentType; // private String filename; // Получить параметр PRAM в jsp @suppresswarnings ("tempercation") // Загрузка файла public String upload () throws исключение {string root =) // file загружать ServletActionContext.getServletContext (). GetRealPath ("/upload"); // upload system.out.println (root); InputStream InputStream; File destfile; OutputStream OS; for (int i = 0; i <file.size (); i ++) {inputStream = new FileInputStream (file.get (i)); destfile = new File (root, this.getFileFilename (). get (i)); OS = New FileOutputStream (destfile); byte [] buffer = new Byte [400]; int length = 0; while ((length = inputstream.read (buffer))> 0) {os.write (buffer, 0, length); } inputStream.close (); os.close (); } HttpservletRequest request = ServletActionContext.getRequest (); request.setattribute ("filename", filefilename); вернуть успех; } // Скачать файл public inputStream getDownloadfile () бросает filenotfoundexception, unsupportedencodingexception {system.out.println (getFilename ()); // Если имя загрузки файл является китайским, выполните преобразование кодирования символов servletactionContext.getResponse (). Setheader ("Content-Disposition", "Attachment; filename =" + java.net.urlencoder.encode (filename, "utf-8")); InputStream inputStream = new FileInputStream ("f:/" // Использовать абсолютный путь для загрузки файла "test.txt" из этого пути + this.getFilename ()); System.out.println (inputStream); вернуть inputStream; } // Скачать public String downloadfile () Throws Exception {return Success; } public String getFilename () бросает UnsupportEncodingException {return filename; } public void setFileName (String FileName) бросает UnsupportEncodingException {this.filename = new String (fileName.getBytes ("iso8859-1"), "utf-8"); }}Примечание: методы получения и установки атрибута были опущены.
В -четвертых, наконец -то файл конфигурации
1. Конфигурация web.xml
<filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </filter> <Filter-Mapping> <Filter-name> struts2 </filter-name> <url-pattern>/*</url-pattern> </filter-name> <urll>/*</url-pattern> </filter-mame> <Url-pattern>/*</url-pattern> </filter-mame> <Url-pattern>/*</url-pattern> </filter-mame> <urll-pattern>/*
2. Конфигурация struts.xml
<struts> <constant name = "struts.i18n.encoding" value = "utf-8"> </constant> <constant name = "struts.multipart.savedir" value = "f:/"> </constant> <name = "struts2" extends = "struts-default"> <action name name = "success">/jsp/result.jsp </result> <receptor-ref name = "fileupload"> <!-MaximumSize (необязательно)-максимальная длина файла, загруженного в действие, разрешенное этим перехватчиком (в байтовых единицах). Обратите внимание, что этот параметр не имеет ничего общего со свойствами, определенными в веб -работах. По умолчанию 2 МБ-> <param name = "maximumSize"> 409600 </param> <!-AltingTypes (необязательно)-разделенный запятой список типов ContentType (например, Text/HTML). Эти списки являются ContentTypes, разрешенным этим перехватчиком для перехода к действию. If not specified, any upload type is allowed.--> <param name="allowedTypes"> text/plain </param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <action name="download" method="downloadFile" > <result name="success" type="stream"> <!--Specify file download type application/octet-stream default value can download all Типы -> <param name = "contentType"> Application/txt; </param> <!-Укажите загруженное имя файла и метод отображения, но обратите внимание на искаженную код китайских имен. Решение: Обработка кодирования-> <!-ContentDisposion-это метод обработки загрузки файла, включая встроенное и вложение. По умолчанию встроено. При использовании вложений он настроен следующим образом: ATTHAMENT; FILENAME = "FILENAME". --> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <!--Get inputStream from getDownloadFile() method--> <param name="inputName">downloadFile</param><!-- Specify the cache size of the downloaded file--> <param name="bufferSize">2048</param> </result> </action> </package> </struts>Простая многопрофильная загрузка Struts2 и однолетная загрузка реализованы.
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.