使用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="#" οnclick="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";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值