首先,要实现多文件上传,需要在前端使用表单,并且表单中需要添加一个 enctype="multipart/form-data"
的属性,才能够让文件被正确解析和上传。同时,需要使用 type="file"
的 <input>
标签来让用户选择文件。
在Struts2中,可以使用 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
类来获取上传的文件。使用步骤如下:
- 首先,在
struts.xml
中配置一个action
:
<action name="uploadAction" class="com.example.UploadAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
- 在
UploadAction
类中,使用ServletActionContext.getRequest()
获取request对象,再通过MultiPartRequestWrapper
类获取上传文件:
public class UploadAction extends ActionSupport{
private List<File> file;
private List<String> fileContentType;
private List<String> fileFileName;
// 省略getter/setter方法
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
File[] files = multiWrapper.getFiles("file");
String[] contentTypes = multiWrapper.getContentTypes("file");
String[] fileNames = multiWrapper.getFileNames("file");
// 处理上传的文件
// 省略处理文件的代码
return SUCCESS;
}
}
在上述代码中,MultiPartRequestWrapper
的 getFiles()
、getContentTypes()
、getFileNames()
方法会返回数组,分别对应上传的文件、文件类型和文件名。
下面来看两个示例,一个实现单个文件上传,一个实现多个文件上传。
示例一:实现单文件上传
首先,在 UploadAction
类中,定义一个 File
类型的字段,通过 getter/setter
方法,使它能够被访问和赋值:
public class UploadAction extends ActionSupport{
private File file;
private String fileContentType;
private String fileFileName;
// 省略getter/setter方法
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
File[] files = multiWrapper.getFiles("file");
String[] contentTypes = multiWrapper.getContentTypes("file");
String[] fileNames = multiWrapper.getFileNames("file");
if(files != null && files.length > 0) {
file = files[0];
fileContentType = contentTypes[0];
fileFileName = fileNames[0];
// 处理上传的文件
// 省略处理文件的代码
return SUCCESS;
}else{
return ERROR;
}
}
}
然后,在前端添加一个表单,通过 type="file"
的 <input>
标签让用户选择要上传的文件:
<form action="uploadAction" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="Upload"/>
</form>
最后,在 struts.xml
中配置 UploadAction
:
<action name="uploadAction" class="com.example.UploadAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
示例二:实现多文件上传
在 UploadAction
类中,定义一个 List<File>
类型的字段,通过 getter/setter
方法,使它能够被访问和赋值:
public class UploadAction extends ActionSupport{
private List<File> files;
private List<String> filesContentType;
private List<String> filesFileName;
// 省略getter/setter方法
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
File[] temps = multiWrapper.getFiles("file");
String[] contentTypes = multiWrapper.getContentTypes("file");
String[] fileNames = multiWrapper.getFileNames("file");
if(temps != null && temps.length > 0) {
files = new ArrayList<>(Arrays.asList(temps));
filesContentType = Arrays.asList(contentTypes);
filesFileName = Arrays.asList(fileNames);
// 处理上传的文件
// 省略处理文件的代码
return SUCCESS;
}else{
return ERROR;
}
}
}
然后,在前端添加一个表单,通过 type="file"
的 <input>
标签,添加multiple
属性, 来让用户选择要上传的文件:
<form action="uploadAction" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple />
<input type="submit" value="Upload"/>
</form>
最后,在 struts.xml
中配置 UploadAction
:
<action name="uploadAction" class="com.example.UploadAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:struts2实现多文件上传 - Python技术站