Для достижения этого необходимы некоторые изменения как на стороне клиента, так и на стороне сервера:
- Клиентская сторона : используйте несколько тегов <s: file>, которые позволяют пользователю выбирать столько файлов, сколько необходимо.
- Сторона сервера : в классе действия измените тип переменных-членов из одного объекта в массив или список следующим образом:
- Файл X в строку [] X или список <файл> X
- String XFileName — String [] XFileName или List <String> XFileName
- String XContentType to String [] XContentType или List <String> XContentType
Где X — это имя тега <s: file> в форме загрузки, например:
<s:file name="fileUpload" />
тогда X будет «fileUpload». Следовательно, в классе действий:
File[] fileUpload;
String[] fileUploadFileName;
String[] fileUploadContentType;
или:
List<File> fileUpload;
List<String> fileUploadFileName;
List<String> fileUploadContentType;
И не забудьте правильно создавать геттеры и сеттеры для этих переменных.
1. Пример загрузки нескольких файлов
В следующем примере программы показано, как реализовать функциональность для загрузки нескольких файлов с помощью инфраструктуры Struts 2. Приложение показывает форму загрузки, которая позволяет пользователю выбрать три файла для загрузки одновременно.
Загруженные файлы копируются в папку, которая настроена в файле struts.xml приложения .
Давайте посмотрим, как кодируется пример приложения.
2. Напишите код для формы загрузки
Форма загрузки реализована на странице upload.jsp следующим образом:
При запуске страница выглядит так:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Multiple Files Upload with Struts2</title>
</head>
<body>
<center>
<h2>Pick multiple files to upload</h2>
<s:form action="uploadFile" enctype="multipart/form-data" method="post">
<s:file name="fileUpload" label="Pick file #1" size="30"/>
<s:file name="fileUpload" label="Pick file #2" size="30"/>
<s:file name="fileUpload" label="Pick file #3" size="30"/>
<br/>
<s:submit value="Upload All" />
</s:form>
</center>
</body>
</html>
При отправке этой формы вызывается действие uploadFile.
3. Напишите код для класса действий
Реализуйте класс действий Struts 2 в файле MultipleFilesUploadAction.java следующим образом:
package com.geekonjava.struts;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class MultipleFilesUploadAction {
private File[] fileUpload;
private String[] fileUploadFileName;
private String[] fileUploadContentType;
/**
* This is the path to save uploaded file, which is configured in struts.xml
*/
private String saveDirectory;
public String doUpload() {
// copy the uploaded files into pre-configured location
for (int i = 0; i < fileUpload.length; i++) {
File uploadedFile = fileUpload[i];
String fileName = fileUploadFileName[i];
File destFile = new File(saveDirectory + File.separator + fileName);
try {
FileUtils.copyFile(uploadedFile, destFile);
} catch (IOException ex) {
System.out.println("Could not copy file " + fileName);
ex.printStackTrace();
}
}
return "success";
}
public File[] getFileUpload() {
return fileUpload;
}
public void setFileUpload(File[] fileUploads) {
this.fileUpload = fileUploads;
}
public String[] getFileUploadFileName() {
return fileUploadFileName;
}
public void setFileUploadFileName(String[] fileUploadFileNames) {
this.fileUploadFileName = fileUploadFileNames;
}
public String[] getFileUploadContentType() {
return fileUploadContentType;
}
public void setFileUploadContentType(String[] fileUploadContentTypes) {
this.fileUploadContentType = fileUploadContentTypes;
}
public String getSaveDirectory() {
return saveDirectory;
}
public void setSaveDirectory(String saveDir) {
this.saveDirectory = saveDir;
}
}
В этом классе действий POJO мы используем три массива для хранения загруженных файлов:
private File[] fileUpload;
private String[] fileUploadFileName;
private String[] fileUploadContentType;
- Обратите внимание, что слово «fileUpload» соответствует значению атрибута name тега <s: file> в файле upload.jsp. Перехватчик Struts 2 под названием fileUpload извлекает данные для этих переменных через сеттеры.
- Значение переменной saveDirectory задается через соответствующий установщик с помощью перехватчика staticParams в Struts 2, и это значение можно настроить в файле struts.xml.
- Метод ввода класса действия doUpload () копирует загруженные файлы из временного каталога в местоположение, указанное в переменной saveDirectory, а затем перенаправляет в представление «success», которое является страницей результатов.
Подробнее >>>>> Geek On Java <<<<<