struts2中自带了文件上传的拦截器,用起来非常的简单和方便。下面详细说明struts2实现文件上传的步骤。
前言: 实现该方法,必须用到两个依赖:
这个两个依赖如果是使用maven那么再导入struts2依赖时自动导包,如果没有使用maven则要自己手动导包。
1 文件上传要采用form表单提交的方式,在前端页面中要使用表单
<form action="/fileAction" method="post" enctype="multipart/form-data">
<label for="fileInfo">个人档案</label><input id="fileInfo" name="fileInfo" type="file">
<input type="submit" value="提交">
</form>
注意 表单提交的方式为post请求, 并且enctype必须有并且值为”multipart/form-data”
2 前端提交的地址要在struts2的配置文件中配置,文件大小默认是不超出2M如果文件有大小设置则加入参数
<!--开启常量-->
<constant name="struts.multipart.maxSize" value="1000000000"/>
如果没有大小限制,则不需要该设置
3 struts.xml配置内容
<!--大小设置-->
<constant name="struts.multipart.maxSize" value="1000000000"></constant>
<package name="file" namespace="/" extends="struts-default">
<!-- 指定(限制)上传文件的类型,定义局部拦截器,修改默认拦截器的属性
"fileUpload.maximumSize" :限制上传最大的文件大小。
"fileUpload.allowedTypes":允许上传文件的类型。
"fileUpload.allowedExtensions":允许上传文件的可扩展文件类型。 -->
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">500000000</param>
<param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param>
<param name="fileUpload.allowedExtensions">.txt,.ppt,.doc</param>
</interceptor-ref>
<action name="fileAction" class="fileAction" method="upload">
<result name="success">/hello.jsp</result>
</action>
</package>
4 Action类中的代码
public class FileUploadAction extends ActionSupport {
private File fileInfo; //上传文件表单中 file的name保持一致
private String fileInfoContentType;//前缀和表单中的file的name保持一致,后面的名字固定为ContentType
private String fileInfoFileName;//前缀和表单中的file的name保持一致,后面的名字固定为FileName
//然后为属性添加get-set方法
public String upload() {
System.out.println("*********文件*******" + fileInfo);
System.out.println("*********文件类型*******" + fileInfoContentType);
System.out.println("*********文件名*******" + fileInfoFileName);
//得到上传文件在服务器的路径加文件名
String target = ServletActionContext.getServletContext().getRealPath("/upload");
System.out.println("文件存储位置" + target);
//获得文件的扩展名
int i = fileInfoFileName.lastIndexOf(".");
String extenssion = "";
if (i != -1){
extenssion = fileInfoFileName.substring(i+1);
}
//获得文件的新的名字,以时间戳为名字,避免文件名重复
String newFileName = new Date().getTime() + "." + extenssion;
System.out.println("文件的名字"+newFileName);
File newFile = new File(target, newFileName);
//判断文件是否存在,如果文件已经不存在就新建一个文件
if (!newFile.getParentFile().exists()) {
newFile.getParentFile().mkdir();
}
try {
//将接收到的文件复制到新建的文件中
FileUtils.copyFile(fileInfo, newFile);
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}