文件上传是指将本地文件上传到服务器的指定目录下,使用struts上传文件,首先要使form表单的enctype属性值设置为multipart/form-data。
单文件上传
文件上传页面代码如下
<body>
<s:actionerror />
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
<input name="upload" type="file" /><br />
<input type="submit" value="上传" />
</form>
</body>
文件上传Action类
public class UploadAction extends ActionSupport {
private File upload; //文件
private String uploadContentType;//文件类型
private String uploadFileName;//文件名
//此处省略3个属性的get与set方法
public String upload() {
// 设置文件保存的路径
String path = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload/");
File f = new File(path+"/"+uploadFileName);
try {
FileUtils.copyFile(upload, f);
System.out.println("上传成功");
} catch (IOException e) {
//设置错误信息,上传错误时在首页显示
this.addActionError("上传失败");
e.printStackTrace();
//发生错误时返回页面
return "upload";
}
return null;
}
}
struts.xml中需要设置个错误跳转的页面
<action name="upload" method="upload" class="com.wang.action.UploadAction">
<result name="upload">/Upload.jsp</result>
</action>
多文件上传
多文件上传与单文件上传一样的,就是在上传的页面多设置几个文件的表单框,主意表单name属性的值要一样
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
<input name="upload" type="file" /><br/>
<input name="upload" type="file" />
<input type="submit" value="上传" />
</form>
然后再Action中需要用数组操作代替原先的单文件操作
public class UploadAction extends ActionSupport {
private File[] upload; //文件
private String[] uploadContentType;//文件类型
private String[] uploadFileName;//文件名
// 此处省略3个属性的get与set方法
public String upload() {
//设置文件保存的路径
String path = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload/");
for (int i = 0; i <uploadFileName.length ; i++) {
File f = new File(path+"/"+uploadFileName[i]);
try {
FileUtils.copyFile(upload[i], f);
System.out.println("上传成功");
} catch (IOException e) {
this.addActionError("上传失败");
e.printStackTrace();
return "upload";
}
}
return null;
}
}
限制文件的大小和类型
在struts.xml文件中设置常量
- maximumSize:上传文件的最大长度,默认为2MB
- allowedTypes:允许上传文件的类型,各类型以逗号分隔
- allowedExtensions:允许上传文件的扩展名,个扩展名之间以逗号分隔
<!--设置文件上传允许最大值为10MB(设置全局)-->
<constant name="struts.multipart.maxSize" value="10485760"></constant>
<!-- 在<action>中设置拦截器 -->
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">4194304</param>
<param name="fileUpload.allowedTypes">
text/plain,application/msword
</param>
<param name="allowedExtensions">
.txt,.png,.jpg
</param>
</interceptor-ref>