我想使用单个Struts 2文件标签上传多个文件。在Struts 2中使用单个文件标签上传多个文件
与Gmail一样,我们使用CTRL键附加多个文件以选择多个文件。
我知道如何上传多个文件,但我想使用单个文件标签。
我想使用单个Struts 2文件标签上传多个文件。在Struts 2中使用单个文件标签上传多个文件
与Gmail一样,我们使用CTRL键附加多个文件以选择多个文件。
我知道如何上传多个文件,但我想使用单个文件标签。
我在小画廊应用程序中上传多个文件。如果你的行动已经被设置为接收多个文件,那么它很简单,只要(警告:这个工程除了IE浏览器几乎所有主要的浏览器,所以你需要为这个基于jQuery的或闪存解决方案):
<s:form namespace="/gallery" action="image-upload" method="POST" enctype="multipart/form-data">
<s:file name="image" multiple="multiple"/>
<s:submit/>
</s:form>
您可能已经查看过设置最大文件大小的参数(对于单个文件),默认情况下这是2MB,如果我没有记错,并且最大总文件大小有不同的值(即所有文件汇总在一起)。如果用户能够上传图片增加这个后来值收集好是非常有用的,这个值设置为大约20 MB(在struts.xml中):
<constant name="struts.multipart.maxSize" value="20000000" />
编辑:对于感兴趣的,在html从上面呈现的是...
<form id="image-upload" name="image-upload" action="/PhotoGallery/gallery/image-upload.action" method="POST" enctype="multipart/form-data">
<input type="file" name="image" value="" id="image-upload_image" multiple="multiple"/>
<input type="submit" id="image-upload_0" value="Submit"/>
</form>
UPDATE 2014月(近2年后): 多重属性现在被Internet Explorer 10,火狐,歌剧,铬,和Safari支持。
它不受Internet Explorer 9和更早版本的支持。
我从来没有见过'multiple'作为文件参数。可以将我链接到它提到的doc,因为它真的是一件有趣的事情 – 2012-03-22 07:41:13
从来没有看到文件标记的多个属性 – 2012-03-22 08:48:07
+1。 @UmeshAwasthi:[如这里所述](http://stackoverflow.com/questions/16393581/need-to-upload-multiple-files-at-once/17212916#17212916),Struts的'
以下示例程序演示如何实现使用Struts2框架上载多个文件的功能。该应用程序显示一个上传表单,允许用户选取三个文件一次上传。 上传的文件被复制到应用程序的struts.xml文件中配置的位置。
让我们看看示例应用程序是如何编码的。 上传的形式在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" multiple="multiple" label="Pick files" size="30"/>
<br/>
<s:submit value="Upload All" />
</s:form>
</center>
</body>
</html>
实施MultipleFilesUploadAction.java文件的Struts2的动作类,如下所示:
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;
<s:file>
标记的名称 属性的值匹配。 Struts2的 拦截器调用fileUpload将通过设置器为这些变量 获取数据。doUpload()
拷贝上传的文件 从临时目录由 saveDirectory
变量指定的位置,然后重定向到一个‘成功’视图,其是 结果页。结果页面result.jsp的 - 是非常简单的,它显示了一个成功的消息:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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>Upload result</title>
</head>
<body>
<center>
<h2>The files were uploaded successfully</h2>
</center>
</body>
</html>
我们通过应用程序的支柱连接上传表单页面,动作类和结果页面.XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.multipart.maxSize" value="20971520" /> <!-- 20MB -->
<package name="fileUpload" extends="struts-default">
<action name="uploadFile" class="com.example.struts.MultipleFilesUploadAction"
method="doUpload">
<param name="saveDirectory">E:/Test/Upload</param>
<interceptor-ref name="fileUpload">
<param name="allowedTypes">*/*</param>
<param name="maximumSize">4194304</param> <!-- 4MB -->
</interceptor-ref>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params" />
<interceptor-ref name="validation" />
<interceptor-ref name="workflow" />
<result name="success" type="redirect">/result.jsp</result>
<result name="input">/upload.jsp</result>
</action>
</package>
</struts>
fileUpload
被配置为允许所有文件 类型可以上传,并且单个文件的最大大小为 4MB。struts.multipart.maxSize
限制允许多个请求的最大大小为 为20MB。这意味着上传 文件的总大小不能超过20MB。基本上与官方指南相同 - https://cwiki.apache.org/confluence/display/WW /文件+上传#的FileUpload-UploadingMultipleFiles。 – 2015-07-22 12:34:18
S2本身不使用单标签不提供这样的功能,但你可以使用jQuery或其他东西为 – 2012-03-22 06:22:21
参考这个问题http://stackoverflow.com/questions/8322499/struts2-file-upload – 2012-03-22 06:24:52
嘿@UmeshAwasthi ..可以请你帮助一下上面例子的struts 2映射吗? – 2012-03-26 10:12:59