struts2文件上传
文件上传需要的部分包括:
- 包含form的视图
- 结果视图
- struts.xml配置
- *action方法
- web.xml的配置,这个和其他的struts2的案例相同
包含form的视图
<%@ page language="java" import ="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>//使用struts2的标签必须有的语句
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts2中的文件上传</title>
</head>
<body>
<%--文件上传的必要前提:
1.请求方式必须是post
2.enctype属性的取值必须是multipart/form-data
3.提供一个文件选择域
--%>
<s:actionerror/>
<s:form action="upload.action" enctype="multipart/form-data">
<s:file name="photo" label="照片" />
<s:submit value="上传"/>
</s:form>
</body>
</html>
结果视图:略。
在struts.xml中主要是配置action和设置常量。
<action name="upload" class="myclass" method="upload">
<result name="success">success.jsp</result>
<constant name="struts.dev" value="true"></constant>
<constant name="struts.multipart.maxSize value="10485760"></constant>
在web.xml中配置过滤器,直接照抄就好
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
最后是action方法,重点。
- 首先需要获取上传的字段,同form中的name相同
- 还需要struts的两个属性
public class myclass extends ActionSupport{
//上传字段,同form中文件的name相同
private File photo;
//struts的属性配置
private String photoFileName;//上传字段+FileName
private String photoContentType;//上传字段+ContentType,MIME类型
public String upload()
{
//需要目的地址,存放文件,可以直接用一个变量存地址,也可以用ServletActionContext
//方法1
File destFile = new File(destPath, photoFileName);//若用这个方法,需要在方法外定义的destPath变量。
//方法2
String dirctory = ServletActionContext.getServletContext().getRealPath("/WEB-INF/files");//此处的WEB-INF不是IDE目录工程中的文件,而是服务器Tomato中的文件,在服务器的文件中可以找到上传的文件。
File destFile = new File(dirctory);
//此时的文件为临时文件,小于10k时在内存中,大于10k时在缓存中,需要将其拷贝或剪切
//拷贝如下,但不常用,因为拷贝不删除临时文件
//FileUtils.copyFile(myFile, destFile);
//剪切如下,推荐
photo.renameTo(new File(destFile,photoFileName));
return "success";
}
//get、set方法略
}