При работе в системах B/S он обычно включает загрузку файлов и загрузку файлов. Прежде чем подключиться к структуре Struts2, мы используем компонент FileUpload подпроекта Commons в Apache для загрузки файлов. Однако, если мы это сделаем, код выглядит громоздко и негибко. После обучения Struts2 Struts2 обеспечивает лучший механизм реализации для загрузки и загрузки файлов. Здесь я объясню исходный код для загрузки единого файла и многопрофильной загрузки. Здесь нам нужно импортировать два файла JAR, загруженных загрузкой файлов, один-Commons-FileUpload-1.2.2.jar, а другой-Commons-IO-2.0.1.jar.
StrUTS2 ОДИН -файл загрузка:
Прежде всего, есть страница загрузки файлов JSP. Это относительно просто, это форма с блоком загрузки файла.
<!-При загрузке файла метод подачи формы должен быть публикацию, потому что двоичный файл может быть очень большим при загрузке файла. Существует также атрибут Enctype. This attribute must be written as multipart/form-data, otherwise it will be uploaded to the server in binary text--> <form action="fileUpload.action" method="post" enctype="multipart/form-data"> username: <input type="text" name="username"><br> file: <input type="file" name="file"><br> <input type="submit" value="submit"> </form>
Далее - часть кода FileUploadAction. Поскольку Struts2 предоставляет хороший механизм стажировки для загрузки и загрузки, нам нужно только написать очень мало кода в действии:
открытый класс FileUploadAction расширяет ActionSupport {private String username; // Обратите внимание, что файл не ссылается на сам файл, загруженный фронтальным JSP, но файл, загруженный для хранения его под временной папкой, отдельный файл файла; // Имя файла, отправленного частной строкой FileFilename; // тип MIME файла, отправленного частной строкой FileContentType; public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public file getFile () {return file; } public void setFile (файл файла) {this.file = file; } public String getFileFilEname () {return fileFilename; } public void setFileFilEname (string fileFilEname) {this.filefilename = fileFilename; } public String getFileContentType () {return fileContentType; } public void setFileContentType (String fileContentType) {this.filecontentType = fileContentType; } @Override public String executue () throws exception {string root = servletactOncontext.getServletContext (). GetRealPath ("/upload"); InputStream IS = new FileInputStream (File); OutputStream OS = new FileOutputStream (новый файл (root, fileFilename)); System.out.println ("fileFilename:" + fileFilename); // Поскольку файл является файлом, хранящимся во временной папке, мы можем распечатать его имя файла и путь к файлу, чтобы увидеть, такой же, как и предыдущий FileFilename System.out.println ("file:" + file.getName ()); System.out.println ("file:" + file.getPath ()); Byte [] buffer = новый байт [500]; int length = 0; while (-1! = (length = is.read (buffer, 0, buffer.length))) {os.write (buffer); } os.close (); is.close (); вернуть успех; }}Прежде всего, мы должны прояснить, что файл здесь на самом деле не ссылается на файл, загруженный JSP. Когда файл будет загружен, Struts2 сначала будет искать местоположение хранилища, указанное struts.multipart.savedir (это по умолчанию.properties). Мы можем создать новый файл свойств struts.properties, чтобы указать местоположение временного хранилища файлов. Если это не указано, файл будет храниться в Apache-Tomcat-7.0.29/Catalina/Localhost/Localhost/Localhost/Localhost/Localhost/Localhost/Localhost/Localhost/Localhost/Localhost/Localhost. Затем мы можем указать место хранилища после загрузки файла и просто написать его в поток через выходной поток. В настоящее время мы видим файл, который мы загрузили в папку.
После загрузки файла нам все еще нужно загрузить его. На самом деле, принцип загрузки Struts2 очень прост. Он должен определить входной поток, а затем записать файл в поток ввода. Конфигурация ключа по -прежнему заключается в том, чтобы настроить его в файле конфигурации struts.xml:
Код FileDownLoadAction выглядит следующим образом:
открытый класс FileDownLoadAction extends actionSupport {public inputStream getDownloadFile () {return servletactionContext.getServletContext (). getResourCeasStream («upload/адресная книга 4 сентября 2012.xls»); } @Override public String execute () Throws Exception {return Success; }}Давайте посмотрим, что это действие просто определяет поток ввода, а затем предоставляет его методом Getter. Далее, давайте посмотрим на файл конфигурации struts.xml:
<name Action = "filedownload"> <name name = "success" type = "stream"> <param name = "contentDisposition"> Attachment; filename = "Адресная книга 4 сентября 2012.xls" </param> <param name = "inputeme"> downloadfile </param> </result> </action>
Есть несколько вещей, на которые нам нужно обратить внимание в файле конфигурации struts.xml. Прежде всего, тип результата. В прошлом мы определяли действие. Мы в основном не писали атрибут типа в результате, потому что он по умолчанию запросить пересылку (диспетчер). В дополнение к этому атрибуту, как правило, существуют значения, такие как перенаправление (перенаправление). Здесь, поскольку мы используем загрузку файла, тип должен быть определен как тип потока, сообщая действие. Это результат загрузки файла. В элементе результата обычно существуют параметры. Это используется для установки параметров при загрузке файла. E Это свойство должно получить входной поток файла в действии. Имя должно быть таким же, как и атрибут потока ввода в действии. Затем атрибут ContentDisposion является атрибутом ContentDisposition. Это свойство обычно используется для указания того, как мы хотим обработать загруженный файл. Если значение является вложением, появится ящик для загрузки, позволяя пользователю выбирать, загружать ли загрузку. Если это значение не установлено, браузер сначала проверит, следует ли открывать загруженный файл. Если это возможно, он напрямую откроет загруженный файл (конечно, это не то, что нам нужно). Другим значением является имя файла, которое является именем загрузки файла, подписанным файлом при загрузке. После настройки этой информации мы можем реализовать функцию загрузки файла.
Загрузка нескольких файлов struts2 :
Фактически, принцип многопрофильной загрузки такой же, как и одно файл. Одна загрузка файла - это один файл, и загружается массив файла [] [] [] [] []. Во-первых, давайте посмотрим на код линейной части JSP. Здесь я использовал jQuery для реализации динамического добавления файлов и динамического удаления поля для загрузки:
<script type = "text/javascript" src = "script/jquery-1.8.1.js"> </script> <script type = "text/javascript"> $ (function () {$ ("#кнопка"). (function () {var html = $ ("<into type = 'file' file 'file'>"); value = 'delete'> <br> "); $ ("#body div "). Append (html) .append (button); button.click (function () {html.remove (); button.remove ();})})}) </script> </head> <body id =" form action = "fileuplaud2.act. ectype = "multipart/form-data"> username: <input type = "text" name = "username"> <br> файл: <input type = "file" name = "file"> <input type = "value =" добавить "id =" кнопка "> <br> <div> </div> <input type =" vade = "uppe"> </form> <br> <div> </div> <input = "vadue ="> </form> <br> </div> <input type = "vadue =" Имена файлов должны быть сменены файлами, а затем код действия для загрузки нескольких файлов выглядит следующим образом:
public Class FileUploadAction2 Extends ActionSupport {private String username; // Здесь мы используем список для хранения загруженных файлов. Файл также относится к временным файлам во временных папках, а не на фактически загруженных файлах частного списка <File> файл; // В этом списке хранится имя файла, соответствующее файлу в списке <File> private List <String> fileFilEname; Частный список <string> filecontenttype; public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public List <File> getFile () {return File; } public void setFile (list <File> file) {this.file = file; } public List <string> getFileFilEname () {return fileFilename; } public void setFileFilEname (list <string> fileFilename) {this.filefilename = fileFilename; } public List <string> getFileContentType () {return fileContentType; } public void setFileContentType (list <string> filecontentType) {this.filecontentType = fileContentType; } @Override public String executue () throws exception {string root = servletactOncontext.getServletContext (). GetRealPath ("/upload"); for (int i = 0; i <file.size (); i ++) {inputStream IS = new FileInputStream (file.get (i)); OutputStream OS = new FileOutputStream (новый файл (root, filefilename.get (i))); Byte [] buffer = новый байт [500]; @Suppresswarnings ("неиспользованный") int length = 0; while (-1! = (length = is.read (buffer, 0, buffer.length))) {os.write (buffer); } os.close (); is.close (); } вернуть успех; }}Это также записывает его в выходной поток, чтобы мы могли видеть несколько загруженных файлов в папке
Следующая загрузка файла точно такая же, как и сейчас загрузка файла, и то же самое Struts.xml, поэтому я не буду повторять его здесь.
Резюме: В целом, механизм загрузки и загрузки файла, предоставленный Struts2, упрощает большую часть нашего кода. Мы можем использовать этот механизм в будущих проектах. Мы также можем использовать компонент FileUpload для загрузки файлов. Все это определено личными предпочтениями!
В Javaweb есть только столько контента о функциях загрузки и загрузки файлов, спасибо за чтение.