使用Struts2拦截器实现文件上传和下载

使用Struts2拦截器实现文件下载:

public class User implements java.io.Serializable{

//保存上传的文件
private File upload;

//文件的类型
private String uploadContentType

//文件的名字
private String uploadFileName;

//是否上传简历文件的标识
private String  isUpload;

//下载文件
private InputStream inputStream;

private String userID;//用户名
private String userName;//用户姓名
private String loginName;//登录名
private String loginPwd;//登录密码
private String sex;//性别
}


-----------------------
struts-default.xml
<result-type name="stream" class="org.apache.struts2.dispacher.VelocityResult"/>


struts.xml
<!--实现文件下载-->

<result name="download" type="stream">
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${#request.filename}"</param>//注意$的用法
</result>
注意:取到的filename可能有乱码问题 因为.java默认的是gbk,而xml默认的编码方式是iso8859-1
fielName = new String(fileName.getBytes("gbk"),"iso8859-1");
----------------------
User.java
//文件下载使用的流对象 inputStream;

pirvate InputStream inputStream; getter/setter

----------------------


view.jsp

<tr>
<td align="center" bgColor="#f5fafe" class="ta_01">
简历资料:
</td>
<td class="ta_01" bgColor="#ffffff" colSpan="3">
<a href="#" onclick="openWindow('user/userAction_download.do?userID=${userID }','700','400')" class="cl_01">
<s:property value="filename"/>
</a>
</td>
</tr>

UserAction

public String download() throws Exception{

//使用userID 获取当前用户ID所拥有的详细信息
UserService service = new UserService();

         /**
          *前边的user是service方法返回的user,在daoImpl中创建出来的,所以不
           *是模型驱动中的user
          */
user = service.findUserByID(user);//括号里边的user是模型驱动对象

//在当前用户信息中得到当前用户上传附件的路径

String path = user.getPath();

InputStream inputStream = new FileInputStream(path);//相当于把我路径当中的文件加载到流里边了

user.setInputStream(inputStream);//把这个流给用户,可是这个user不是模型驱动中的对象

        //获取当前文件的文件名
String fileName = user.getFilename();
ServletActionContext.getRequest().setAttribute("filename",fileName); //这个filename在struts.xml用到了

//将user对象放置到栈顶
//获取栈顶对象
ValueStack valueStack = ServletActionContext.getContext().getValueStack;

//清空栈顶对象
valueStack.pop();

//将user放置到栈顶
valueStack.push(user);

return "download";
}

你可能感兴趣的:(freemarker,struts,velocity)