CreateTime--2017年9月7日10:25:33

Author:Marydon

struts2实现文件查看、下载

1.界面展示

  1. <a style="color: #199ED8;" target="_blank" href="<c:url value="/telemedicine/reseCons/viewFile.do?fileName=201516529IO.jpg"/>">查看</a>
  2. <a style="color: #199ED8;" target="_blank" href="<c:url value="/telemedicine/reseCons/downloadFile.do?fileName=201516529IO.jpg"/>">下载</a>

2.struts2配置

  1. <!-- 文件预览 -->
  2. <action name="viewFile" class="telemedicine.web.actions.reseCons.FileOperationAction"
  3. method="viewFile">
  4. <result name="success" type="stream">
  5. <!-- 设置返回的文件类型 -->
  6. <param name="contentType">${contentType}</param>
  7. <!-- 设置获取流的方法 -->
  8. <param name="inputName">inputStream</param>
  9. <!-- bufferSize 设置缓冲区字节大小默认是1024 -->
  10. </result>
  11. </action>
  12. <!-- 文件下载 -->
  13. <action name="downloadFile" class="telemedicine.web.actions.reseCons.FileOperationAction"
  14. method="downloadFile">
  15. <result name="success" type="stream">
  16. <!-- 设置返回的文件类型 -->
  17. <param name="contentType">${contentType}</param>
  18. <!-- 设置获取文件流的方法 -->
  19. <param name="inputName">inputStream</param>
  20. <!--添加参数,即就是下载的名称-->
  21. <param name="contentDisposition">${contentDisposition}</param>
  22. <!-- bufferSize 设置缓冲区字节大小默认是1024 -->
  23. </result>
  24. </action>

说明:struts2使用${}方式动态从action类中取值  

3.action(控制器)

  3.1 供struts2取值

  1. // 文件输入流
  2. private ByteArrayInputStream inputStream;
  3. // 返回内容类型
  4. private String contentType;
  5. // 文件下载时,指定的名称
  6. private String contentDisposition;
  7.  
  8. public ByteArrayInputStream getInputStream() {
  9. return inputStream;
  10. }
  11.  
  12. public String getContentType() {
  13. return contentType;
  14. }
  15.  
  16. public String getContentDisposition() {
  17. return contentDisposition;
  18. }

  3.2 详细代码

需要导入:

  1. import java.io.BufferedInputStream;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.InputStream;
  6. import java.util.Map;
  7. import org.apache.struts2.ServletActionContext;
  1. /**
  2. * 文件预览
  3. * @return
  4. */
  5. public String viewFile() {
  6. try {
  7. // 1.获取客户端提交参数
  8. String fileName = WebUtils.getParameter("fileName");
  9. // 2.获取文件路径
  10. String filePath = "WEB-INF/uploadFiles/" + fileName;
  11. // 获取真实路径
  12. filePath = WebUtils.getRealPath(filePath);
  13. // 字节输出流
  14. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  15. // 3.将文件转换成文件流
  16. // 如果文件不存在,会抛出异常
  17. FileInputStream fis = new FileInputStream(filePath);
  18. // 4.将文件流读取到缓冲区(内存中),目的:提高读取效率
  19. InputStream input = new BufferedInputStream(fis);
  20. // 5.指定内存空间大小
  21. byte[] bt = new byte[1024];
  22. int len = 0;
  23. // 6.从内存中每次读取1024个字节,放到字节数组bt中,然后将bt中的字节写入到输出流中
  24. while ((len = input.read(bt)) > 0) {
  25. bos.write(bt, 0, len);
  26. }
  27. // 7.私有属性赋值
  28. // 7.1 字节输入流
  29. this.inputStream = new ByteArrayInputStream(bos.toByteArray());
  30. // 7.2获取该文件所对应的文件类型
  31. this.contentType = WebUtils.getServletContext().getMimeType(fileName);
  32.  
  33. bos.close();
  34. input.close();
  35. } catch (Exception e) {
  36. this.addMessage(-1, e.getMessage());
  37. this.msg = "" + getExceptionMessage(e);
  38. this.code = -1;
  39. log.error(e.getMessage());
  40. e.printStackTrace();
  41. }
  42. return SUCCESS;
  43. }
  44.  
  45. /**
  46. * 文件下载
  47. * @return
  48. */
  49. public String downloadFile() {
  50. try {
  51. // 1.获取客户端提交参数
  52. String fileName = WebUtils.getParameter("fileName");
  53. // 2.获取文件路径
  54. String filePath = "WEB-INF/uploadFiles/" + fileName;
  55. // 获取真实路径
  56. filePath = WebUtils.getRealPath(filePath);
  57. // 字节输出流
  58. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  59. // 3.将文件转换成文件流
  60. // 如果文件不存在,会抛出异常
  61. FileInputStream fis = new FileInputStream(filePath);
  62. // 4.将文件流读取到缓冲区(内存中),目的:提高读取效率
  63. InputStream input = new BufferedInputStream(fis);
  64. // 5.指定内存空间大小
  65. byte[] bt = new byte[1024];
  66. int len = 0;
  67. // 6.从内存中每次读取1024个字节,放到字节数组bt中,然后将bt中的字节写入到输出流中
  68. while ((len = input.read(bt)) > 0) {
  69. bos.write(bt, 0, len);
  70. }
  71. // 7.私有属性赋值
  72. // 7.1 字节输入流
  73. this.inputStream = new ByteArrayInputStream(bos.toByteArray());
  74. // 7.2获取该文件所对应的文件类型
  75. this.contentType = WebUtils.getServletContext().getMimeType(fileName);
  76. // 7.3指定下载该文件时的文件名称
  77. this.contentDisposition = "attachment;fileName=" + fileName;
  78.  
  79. bos.close();
  80. input.close();
  81. } catch (Exception e) {
  82. this.addMessage(-1, e.getMessage());
  83. this.msg = "" + getExceptionMessage(e);
  84. this.code = -1;
  85. log.error(e.getMessage());
  86. e.printStackTrace();
  87. }
  88. return SUCCESS;
  89. }

  说明:

    其中,通过WebUtils.java类调用的方法,请依次移步至文章:struts2获取前台提交的参数struts2获取文件真实路径struts2获取ServletContext对象

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

 

struts2实现文件查看、下载的更多相关文章

  1. struts2的文件上传和文件下载

    实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...

  2. struts2实现文件上传和下载

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  3. Struts2之文件上传与下载

    时间:2017-1-11 15:47 --使用commons-fileupload组件上传1.客户端    *   method="post"    *   <input t ...

  4. Struts2入门(七)——Struts2的文件上传和下载

    一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...

  5. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  6. IOS下载查看PDF文件(有下载进度)

    IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...

  7. Struts2之文件上传下载

    本篇文章主要介绍如何利用struts2进行文件的上传及下载,同时给出我在编写同时所遇到的一些问题的解决方案. 文件上传 前端页面 <!-- 引入struts标签 --> <%@tag ...

  8. 7、Struts2实现文件上传和下载

    一.实现单个文件上传 1.创建如下web项目结构 2.在src下的com.action包下创建UploadAction.java package com.action; import java.io. ...

  9. Struts2实现文件上传下载功能(批量上传)

    今天来发布一个使用Struts2上传下载的项目, struts2为文件上传下载提供了好的实现机制, 首先,可以先看一下我的项目截图 关于需要使用的jar包,需要用到commons-fileupload ...

随机推荐

  1. Kernel Space与User Space(转)

    对于刚刚接触Linux的菜鸟来说,可能会不理解大家常说的Kernel Space和User Space是什么意思,我简单搜了一下,发现阮一峰写过一个比较简洁的介绍,贴下来给大家: 学习 Linux 时 ...

  2. 【bzoj3065】带插入区间K小值 替罪羊树套权值线段树

    题目描述 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间k小值.他每次向它的随从伏特提出 ...

  3. 深入理解 Flutter 的编译原理与优化

    阿里妹导读:对于开发者而言,Flutter工程和我们的Android/iOS工程有何差别?Flutter的渲染和事件传递机制如何工作?构建缓慢或出错又如何去定位,修改和生效呢?凡此种种,都需要对Flu ...

  4. 采花 flower

    采花 flower 题目描述 萧芸斓是 Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了 n 朵花,花有 c 种颜色(用整数 1- ...

  5. jQuery初级

    一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQuery对象 jQuery产 ...

  6. 笔记:CS231n+assignment2(作业二)(二)

    一.参数更新策略     1.SGD 也就是随机梯度下降,最简单的更新形式是沿着负梯度方向改变参数(因为梯度指向的是上升方向,但是我们通常希望最小化损失函数).假设有一个参数向量x及其梯度dx,那么最 ...

  7. java读取文件的基本操作

    import java.io.FileInputStream; /** * 使用FileInputStream读取文件 */ public class FileRead { /** * @param ...

  8. PowerDesigner常用快捷键

    一般快捷键 F4   打开检查模型窗口,检查模型 F5   如果图窗口内的图改变过大小,恢复为原有大小即正常大小 F6   放大图窗口内的图 F7   缩小图窗口内的图 F8   在图窗口内中查看全部 ...

  9. mysql source、mysqldump 导入导出数据(转)

    解决了mysql gbk编码的导入导出问题,感谢作者. 一.导入数据 1.确定 数据库默认编码,比如编码 为gbk,将读入途径编码同样设为gbk,命令为:           set names gb ...

  10. 本机开发Native Development:Invalid path for NDK (转)

    打开window菜单下的preference选项.选择Android,Native Development(本地开发) 选择你的NDK安装目录.但是,这个插件目前仅支持ndk的r4和r5版本,更高版本 ...