struts实现文件下载

一、页面

这个页面的里面的简历资料就是我们的下载入口。

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<HTML><HEAD><meta http-equiv="Content-Language" content="zh-cn"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><LINK href="${pageContext.request.contextPath}/css/Style.css" type="text/css" rel="stylesheet"><script language="javascript" src="${pageContext.request.contextPath}/js/public.js"></script></HEAD><body><form id="userAction_save_do" name="Form1" action="${pageContext.request.contextPath}/user/userAction_save.do" method="post" enctype="multipart/form-data"><table cellSpacing="1" cellPadding="5" width="100%" align="center" bgColor="#eeeeee" style="border: 1px solid #8ba7e3" border="0"><tr><td class="ta_01" align="center" bgColor="#afd1f3" colSpan="4"height="26"><strong><STRONG>查看用户</STRONG></strong></td></tr><tr><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">登录名: <s:debug /></td><td class="ta_01" bgColor="#ffffff"><s:property value="model.logonName"/></td><td align="center" bgColor="#f5fafe" class="ta_01">用户姓名:</td><td class="ta_01" bgColor="#ffffff"><s:property value="model.userName"/></td></tr><tr><td align="center" bgColor="#f5fafe" class="ta_01">性别:</td><td class="ta_01" bgColor="#ffffff"><s:property value="model.sex"/></td><td align="center" bgColor="#f5fafe" class="ta_01">学历:</td><td class="ta_01" bgColor="#ffffff"><s:property value="model.education"/></td></tr><tr><td align="center" bgColor="#f5fafe" class="ta_01">出生日期:</td><td class="ta_01" bgColor="#ffffff"><s:property value="model.birthday"/></td><td align="center" bgColor="#f5fafe" class="ta_01">电话:</td><td class="ta_01" bgColor="#ffffff"><s:property value="model.telephone"/></td></tr><tr><td align="center" bgColor="#f5fafe" class="ta_01">兴趣爱好:</td><td class="ta_01" bgColor="#ffffff" colSpan="3"><s:property value="model.interest"/></td></tr><tr><td align="center" bgColor="#f5fafe" class="ta_01">简历资料:</td><td class="ta_01" bgColor="#ffffff" colSpan="3"><s:a action="user_download" namespace="/" cssClass="cl_01"><s:param name="userID" value="model.userID"></s:param><s:property value="model.filename"/></s:a></td></tr><TR><TD class="ta_01" align="center" bgColor="#f5fafe">备注:</TD><TD class="ta_01" bgColor="#ffffff" colSpan="3"><s:property value="model.remark"/></TD></TR><TR><td align="center" colSpan="4" class="sep1"><img src="${pageContext.request.contextPath}/images/shim.gif"></td></TR><TR><td class="ta_01" style="WIDTH: 100%" align="right" bgColor="#f5fafe" colSpan="4"><FONT face="宋体">       </FONT><INPUT class="button_ok" type="button" οnclick="history.go(-1)" value="返回"/><span id="Label1"></span></td></TR></table></form></body>
</HTML>

二、action类

下载的时候,我们需要下载的文件输入流,MIME类型和文件名。

1、根据用户id查询到用户。

2、根据用户获取到文件输入流。

3、根据用户获取文件名。

4、在下载的时候可能会出现名称乱码,所以我们需要用encodeDownloadFilename方法解决。

/*** 下载简历 (struts2 下载 一个流、 两个头信息)* * @return*/public String download() {UserService userService = new UserService();user = userService.findById(user.getUserID());return "downloadSUCCESS";}// 返回文件流public InputStream getInputStream() throws IOException {if (user == null || user.getPath() == null) {return null;}File file = new File(ServletActionContext.getServletContext().getRealPath(user.getPath()));return new FileInputStream(file);}// 返回简历 MIME类型public String getContentType() {if (user == null || user.getFilename() == null) {return null;}return ServletActionContext.getServletContext().getMimeType(user.getFilename());}// 返回编码后的文件名public String getDownloadFilename() throws IOException {if (user == null || user.getFilename() == null) {return null;}return encodeDownloadFilename(user.getFilename(), ServletActionContext.getRequest().getHeader("user-agent"));}/*** 下载文件时,针对不同浏览器,进行附件名的编码* * @param filename*            下载文件名* @param agent*            客户端浏览器* @return 编码后的下载附件名* @throws IOException*/public String encodeDownloadFilename(String filename, String agent)throws IOException {if (agent.contains("Firefox")) { // 火狐浏览器filename = "=?UTF-8?B?"+ new BASE64Encoder().encode(filename.getBytes("utf-8"))+ "?=";} else { // IE及其他浏览器filename = URLEncoder.encode(filename, "utf-8");}return filename;}

三、struts.xml文件配置

<result name="downloadSUCCESS" type="stream"><!-- 下载流 getInputStream --><param name="contentType">${contentType}</param><param name="contentDisposition">attachment;filename=${downloadFilename}</param></result>


就此,我们就实现了文件下载的功能。

struts实战--文件下载相关推荐

  1. struts实战--登陆拦截器

    登陆校验拦截器 一.概述 功能:用户只有登录成功后,才可以进行操作. 二.实现 1).创建一个类,实现Interceptor接口 1.判断用户user是否为空 2.如果为空,则设置哪些方法可以不用登陆 ...

  2. struts实战--实现条件查询(利用dbutils)

    struts实现条件查询---利用dbutils 一.在list.jsp页面修改查询组件 是否上传简历         <s:select list="#{'1':'有','2':'无 ...

  3. struts实战--添加功能(重点文件上传)

    struts实现添加功能(重点上传) 一.对add.jsp页面上html标签修改----struts2的表单标签 1.性别             原标签             <input ...

  4. struts实战--登录功能实现

    struts实现登录功能 一.使用struts2提供的表单标签来改造页面. WebRoot/login/login.jsp                      <form>----- ...

  5. 实战 | 文件下载、及浏览器加速导致不能下载的问题

    目录 1. 版权 2. nginx x-accel 3. 浏览器加速导致的问题 4. DownloadSessionManager 5. 关于下载计数 1. 版权 本文为原创, 遵循 CC 4.0 B ...

  6. Electron-vue开发实战 - 文件下载及进度显示

    主要通过 Electron 中 will-download 事件和主进程和渲染进程之间的通信,实时监听下载进度 main/index.js mainWindow.webContents.session ...

  7. yii2项目实战-博客管理平台的搭建

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 返回通知列表 下一条 上一条 分享资讯 传PPT/文档 提问题 写博客 传资源 创建项目 创建代码片 ...

  8. Struts2之struts2文件下载详解

    一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(do ...

  9. java session 永不过期_Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

最新文章

  1. 综合计算机考试题库,2017年职称计算机考试综合试题模拟题库5
  2. MySQL安装查看密码修改密码
  3. 小米 samba linux,不折腾会死:CentOS7访问小米路由(Samba服务)
  4. ubuntu 18.04 添加快快捷方式
  5. 大摩维持浩大游戏“增持”评级
  6. windows的\r\n与Linux的\n
  7. iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
  8. Deep Learning with PyTorch 必看教程集(4本)
  9. CCNP之IPv6技术-过渡技术(NAT-PT)
  10. Portlet开发指南第三章
  11. 微软补丁日安全公告|11月份
  12. WebCrack:网站后台弱口令批量检测工具 ——yzddMr6
  13. Apache ab测试结果解析
  14. Linux重置root 密码
  15. 全智通A+常见问题汇总解答—A+维修管理—维修领料,修改领料单材料归属到了另一个维修单下
  16. java 表格_Java创建表格实例详解
  17. 浙江凤凰计划:用新零售模式做资本市场敲门砖
  18. 水 hdu5208 2015-04-20 21:03 36人阅读 评论(0) 收藏
  19. 2023中国传媒大学计算机考研信息汇总
  20. python爬虫下载网站磁力链接

热门文章

  1. C语言中函数可变参数解析
  2. 字库点阵测试程序代码
  3. ESP8266-SDK编写的TM1668程序驱动数码管
  4. ST17H26读ID卡调试过程
  5. AB1601低功耗注意事项
  6. bartender外部表不是预期格式_三张表轻松搞定项目计划
  7. 《Fabric 云存储的电子健康病历系统》(2)病历结构体 Records
  8. A题 Go! Fun游长三角 2021年第一届长三角高校数学建模竞赛
  9. 文件权限与目录配置——笔记
  10. KPROCESS 结构体属性介绍