Java中Struts2文件上传问题详解
1. Struts2文件上传概述
在开发web应用程序中,经常需要上传文件,Java提供了很多文件上传的API,Struts2框架也提供了方便的文件上传功能。Struts2的文件上传使用commons-fileupload和commons-io库实现,包括3个部分:上传控件、Action类和文件存储位置。
2. Struts2文件上传问题
在实际项目中,文件上传会遇到很多问题,例如上传的文件过大、上传控件没显示等问题。
2.1 上传的文件过大
在开发过程中,提供给用户的文件上传大小限制不能过于宽松,否则会对服务器资源造成极大的负担,例如上传200M大小的文件,服务器硬盘空间可能很快就被占满了。
可以通过在struts.xml中添加如下配置来限制上传大小:
<constant name="struts.multipart.maxFileSize" value="50*1024*1024" />
这个配置项目设置文件大小限制为50M。
2.2 上传控件没显示
如果上传控件未显示,可能是由配置问题引起的。Struts2的文件上传需添加以下两个配置项:
<interceptors>
<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
<interceptor-stack name="fileUploadStack">
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="fileUploadStack"/>
第一个配置用于拦截文件上传的请求,第二个配置用于配置上传拦截器的顺序。
2.3 文件存储位置
文件上传成功后,需要将文件保存到指定的位置。可以在Action类中通过ServletContext获取上传文件的存储路径,然后将文件保存到该路径下。
在Action类中添加如下代码:
String path=ServletActionContext.getServletContext().getRealPath("/upload/");
File destFile=new File(path,fileUploadFileName);
FileUtils.copyFile(fileUpload, destFile);
上述代码中,path为上传文件存储路径,fileUploadFileName为上传文件的文件名,fileUpload为上传的文件。
3. Struts2文件上传示例
以下是一个简单的文件上传示例:
JSP页面:
<form action="${pageContext.request.contextPath}/upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="fileUpload"/>
<input type="submit" value="上传"/>
</form>
Action类:
public class UploadAction extends ActionSupport{
private File fileUpload;
private String fileUploadFileName;
public File getFileUpload() {
return fileUpload;
}
public void setFileUpload(File fileUpload) {
this.fileUpload = fileUpload;
}
public String getFileUploadFileName() {
return fileUploadFileName;
}
public void setFileUploadFileName(String fileUploadFileName) {
this.fileUploadFileName = fileUploadFileName;
}
@Override
public String execute() throws Exception {
String path=ServletActionContext.getServletContext().getRealPath("/upload/");
File destFile=new File(path,fileUploadFileName);
FileUtils.copyFile(fileUpload, destFile);
return "success";
}
}
上述示例中,使用了commons-io库中的FileUtils.copyFile()方法将上传的文件保存到指定的路径下。
4. 总结
文件上传是开发web应用程序中经常遇到的问题之一,Struts2框架提供了很方便的文件上传功能,但需要注意上传文件大小限制、上传控件未显示等问题。以上是Struts2文件上传问题的一些详细讲解及示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中Struts2文件上传问题详解 - Python技术站