struts2 支持FileUpload 和 COS方式实现文件上传
默认也是使用FileUpload方式。
1)struts.xml文件中指定上传解析器:
<constant name="struts.multipart.parser" value="jakarta"></constant>
2)导入FileUpload支持的jar包。
3) Action类:
public class Upload {
private String name; // 表单的name属性
private String age; // 表单的age属性
private File upload; // 表单的上传文件
private String uploadFileName; // 上传文件名称
private String uploadContentType; // 上传文件类别
private String savePath; // 保存路径,依赖注入方式获取
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getSavePath() {
return savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String execute() throws Exception{
FileOutputStream fos = new FileOutputStream(savePath+"\\"+uploadFileName);
FileInputStream fis = new FileInputStream(upload);
byte[] buffer = new byte[1024];
int len = 0;
while( (len = fis.read(buffer)) > 0 ){
fos.write(buffer,0,len);
}
fis.close();
fos.close();
return success;
}
}
4)struts.xml文件配置:
<action name="upload" class="com.dcsoft.struts.login.actions.Upload">
<param name="savePath">d:\upload</param>
<result>/index.jsp</result>
</action>
5)如果需要对上传文件类型和文件大小做限制,可以手动或者使用struts内部拦截器的方式。
手工方式,Action里已经获取了***ContentType,可以做判断;
文件大小,可以使用File.length()方法返回文件的大小判断。
struts拦截器方式:
struts-default包里定义一个fileUpload拦截器,可以引用该拦截器
<action name="upload" class="com.dcsoft.struts.login.actions.Upload">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">text/plain, image/png</param>
<param name="maximumSize">1024</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<param name="savePath">d:\upload</param>
<result name="input">/upload.jsp</result>
<result>/index.jsp</result>
</action>
6)为了消除控制台出现的使用tomcat临时目录信息,配置"struts.multipart.saveDir"属性。
7)多文件上传,只要把File ***FileName ***ContentType采用数组形式
private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;