Загрузка Файла Struts2
Я хочу загрузить несколько файлов в одной форме, и это количество файлов варьируется от пользователя к другому, например. пользователь может загрузить 2 файла, а другой пользователь может загрузить 12 файлов. Я хочу знать, как я могу создать цикл или что-то в форме JSP struts2 таким образом, что когда пользователь загружает файл, он добавляет его имя в список, и он/она может загрузить другой файл и быть добавлен в список и так далее.
2 ответа:
Вы можете использовать build in Struts2 для загрузки нескольких файлов feature.In ваш файл Jsp вы должны определить что-то вроде
<s:form action="doMultipleUploadUsingList" method="POST" enctype="multipart/form-data"> <s:file label="File (1)" name="upload" /> <s:file label="File (2)" name="upload" /> <s:file label="FIle (3)" name="upload" /> <s:submit /> </s:form>
Который будет отправлять эти файлы в ваш класс действий, и у вас есть возможность собирать содержимое файла в виде списка
public class MultipleFileUploadUsingListAction extends ActionSupport { private List<File> uploads = new ArrayList<File>(); private List<String> uploadFileNames = new ArrayList<String>(); private List<String> uploadContentTypes = new ArrayList<String>(); // There getter and setter methods }
Здесь
[File Name] : File - the actual File [File Name]ContentType : String - the content type of the file [File Name]FileName : String - the actual name of the file uploaded (not the HTML name)
Для получения подробной информации обратитесь к странице загрузки нескольких файлов Struts2
Показать пользователю возможность добавить еще один файл на странице JSP-это вопрос того, как вы хотите покажите это.Все, что вам нужно сделать, когда вы показываете ему файл-имя коробки загрузки должно быть таким же, чтобы
Struts2 param interceptor
мог установить их в качестве списка в вашем классе действий
Я реализовал это с помощью двух плагинов struts2, которые являются, Struts2 jQuery Plugin и Struts2 Scope Plugin
Ответ таков:
Включите эти зависимости в ваш maven POM файл:
<dependency> <groupId>com.jgeppert.struts2.jquery</groupId> <artifactId>struts2-jquery</artifactId> <version>3.2.0</version> <type>pom</type> </dependency> <dependency> <groupId>com.googlecode.struts2scopeplugin</groupId> <artifactId>struts2-scope-plugin</artifactId> <version>1.0.4</version> </dependency>
И мы создаем класс для подготовки формы следующим образом:
public class PrepareUpload extends ActionSupport{ @In (scope=ScopeType.CONVERSATION) @Out (scope=ScopeType.CONVERSATION) private List<File> fileUploadi = new ArrayList<File>(); @In (scope=ScopeType.CONVERSATION) @Out (scope=ScopeType.CONVERSATION) private List<String> fileUploadContentTypei = new ArrayList<String>(); @In (scope=ScopeType.CONVERSATION) @Out (scope=ScopeType.CONVERSATION) private List<String> fileUploadFileNamei = new ArrayList<String>(); @Action(value = "/prepareupload", results = { @Result(location = "upload.jsp", name = "success") }) @End public String execute() throws Exception { return SUCCESS; } public List<File> getFileUploadi() { return fileUploadi; } public void setFileUploadi(List<File> fileUploadi) { this.fileUploadi = fileUploadi; } public List<String> getFileUploadContentTypei() { return fileUploadContentTypei; } public void setFileUploadContentTypei(List<String> fileUploadContentTypei) { this.fileUploadContentTypei = fileUploadContentTypei; } public List<String> getFileUploadFileNamei() { return fileUploadFileNamei; } public void setFileUploadFileNamei(List<String> fileUploadFileNamei) { this.fileUploadFileNamei = fileUploadFileNamei; } }
И класс для добавления в список и обработки вызова ajax следующим образом:
public class UploadAction extends ActionSupport { private static final long serialVersionUID = 7968544374444173511L; private static final Log log = LogFactory.getLog(UploadAction.class); private String echo; @In (scope=ScopeType.CONVERSATION) @Out (scope=ScopeType.CONVERSATION) private List<File> fileUploadi = new ArrayList<File>(); private List<File> fileUpload = new ArrayList<File>(); @In (scope=ScopeType.CONVERSATION) @Out (scope=ScopeType.CONVERSATION) private List<String> fileUploadContentTypei = new ArrayList<String>(); private List<String> fileUploadContentType = new ArrayList<String>(); @In (scope=ScopeType.CONVERSATION) @Out (scope=ScopeType.CONVERSATION) private List<String> fileUploadFileNamei = new ArrayList<String>(); private List<String> fileUploadFileName = new ArrayList<String>(); @Action(value = "/uploada", results = { @Result(location = "simpleecho.jsp", name = "success") }) @Begin public String execute() throws Exception { fileUploadi.addAll( fileUpload); fileUploadFileNamei.addAll(fileUploadFileName); fileUploadContentTypei.addAll(fileUploadContentType); for (int i = 0; i < fileUploadFileNamei.size(); i++) { if (echo == null) echo = fileUploadFileNamei.get(i); else echo += "<br>" + fileUploadFileNamei.get(i); log.info(echo); } return SUCCESS; } public String getEcho() { return echo; } public List<File> getFileUpload() { return fileUpload; } public void setFileUpload(List<File> fileUpload) { this.fileUpload = fileUpload; } public List<String> getFileUploadContentType() { return fileUploadContentType; } public void setFileUploadContentType(List<String> fileUploadContentType) { this.fileUploadContentType = fileUploadContentType; } public List<String> getFileUploadFileName() { return fileUploadFileName; } public void setFileUploadFileName(List<String> fileUploadFileName) { this.fileUploadFileName = fileUploadFileName; } public List<File> getFileUploadi() { return fileUploadi; } public void setFileUploadi(List<File> fileUploadi) { this.fileUploadi = fileUploadi; } public List<String> getFileUploadContentTypei() { return fileUploadContentTypei; } public void setFileUploadContentTypei(List<String> fileUploadContentTypei) { this.fileUploadContentTypei = fileUploadContentTypei; } public List<String> getFileUploadFileNamei() { return fileUploadFileNamei; } public void setFileUploadFileNamei(List<String> fileUploadFileNamei) { this.fileUploadFileNamei = fileUploadFileNamei; } }
И, наконец, jsp должен быть чем-то вроде:
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags"%> <html> <head> <sj:head jqueryui="true" defaultLoadingText="Please wait ..."/> <s:head /> </head> <body> <h1>File Upload:</h1> <s:form action="uploada" method="POST" enctype="multipart/form-data" theme="xhtml" > <s:file label="File:" name="fileUpload" size="40" /> <div id="result" >Add Files Below:</div> <sj:submit targets="result" button="true" validate="true" value="Add File" indicator="indicator" parentTheme="xhtml" /> <sj:submit button="true" validate="true" value="Submit" indicator="indicator" parentTheme="xhtml" /> </s:form> </body> </html>