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

Author:Marydon

struts2实现文件查看、下载

1.界面展示

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

2.struts2配置

<!-- 文件预览 -->
<action name="viewFile" class="telemedicine.web.actions.reseCons.FileOperationAction"
method="viewFile">
<result name="success" type="stream">
<!-- 设置返回的文件类型 -->
<param name="contentType">${contentType}</param>
<!-- 设置获取流的方法 -->
<param name="inputName">inputStream</param>
<!-- bufferSize 设置缓冲区字节大小默认是1024 -->
</result>
</action>
<!-- 文件下载 -->
<action name="downloadFile" class="telemedicine.web.actions.reseCons.FileOperationAction"
method="downloadFile">
<result name="success" type="stream">
<!-- 设置返回的文件类型 -->
<param name="contentType">${contentType}</param>
<!-- 设置获取文件流的方法 -->
<param name="inputName">inputStream</param>
<!--添加参数,即就是下载的名称-->
<param name="contentDisposition">${contentDisposition}</param>
<!-- bufferSize 设置缓冲区字节大小默认是1024 -->
</result>
</action>

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

3.action(控制器)

  3.1 供struts2取值

// 文件输入流
private ByteArrayInputStream inputStream;
// 返回内容类型
private String contentType;
// 文件下载时,指定的名称
private String contentDisposition; public ByteArrayInputStream getInputStream() {
return inputStream;
} public String getContentType() {
return contentType;
} public String getContentDisposition() {
return contentDisposition;
}

  3.2 详细代码

需要导入:

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
/**
* 文件预览
* @return
*/
public String viewFile() {
try {
// 1.获取客户端提交参数
String fileName = WebUtils.getParameter("fileName");
// 2.获取文件路径
String filePath = "WEB-INF/uploadFiles/" + fileName;
// 获取真实路径
filePath = WebUtils.getRealPath(filePath);
// 字节输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// 3.将文件转换成文件流
// 如果文件不存在,会抛出异常
FileInputStream fis = new FileInputStream(filePath);
// 4.将文件流读取到缓冲区(内存中),目的:提高读取效率
InputStream input = new BufferedInputStream(fis);
// 5.指定内存空间大小
byte[] bt = new byte[1024];
int len = 0;
// 6.从内存中每次读取1024个字节,放到字节数组bt中,然后将bt中的字节写入到输出流中
while ((len = input.read(bt)) > 0) {
bos.write(bt, 0, len);
}
// 7.私有属性赋值
// 7.1 字节输入流
this.inputStream = new ByteArrayInputStream(bos.toByteArray());
// 7.2获取该文件所对应的文件类型
this.contentType = WebUtils.getServletContext().getMimeType(fileName); bos.close();
input.close();
} catch (Exception e) {
this.addMessage(-1, e.getMessage());
this.msg = "" + getExceptionMessage(e);
this.code = -1;
log.error(e.getMessage());
e.printStackTrace();
}
return SUCCESS;
} /**
* 文件下载
* @return
*/
public String downloadFile() {
try {
// 1.获取客户端提交参数
String fileName = WebUtils.getParameter("fileName");
// 2.获取文件路径
String filePath = "WEB-INF/uploadFiles/" + fileName;
// 获取真实路径
filePath = WebUtils.getRealPath(filePath);
// 字节输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// 3.将文件转换成文件流
// 如果文件不存在,会抛出异常
FileInputStream fis = new FileInputStream(filePath);
// 4.将文件流读取到缓冲区(内存中),目的:提高读取效率
InputStream input = new BufferedInputStream(fis);
// 5.指定内存空间大小
byte[] bt = new byte[1024];
int len = 0;
// 6.从内存中每次读取1024个字节,放到字节数组bt中,然后将bt中的字节写入到输出流中
while ((len = input.read(bt)) > 0) {
bos.write(bt, 0, len);
}
// 7.私有属性赋值
// 7.1 字节输入流
this.inputStream = new ByteArrayInputStream(bos.toByteArray());
// 7.2获取该文件所对应的文件类型
this.contentType = WebUtils.getServletContext().getMimeType(fileName);
// 7.3指定下载该文件时的文件名称
this.contentDisposition = "attachment;fileName=" + fileName; bos.close();
input.close();
} catch (Exception e) {
this.addMessage(-1, e.getMessage());
this.msg = "" + getExceptionMessage(e);
this.code = -1;
log.error(e.getMessage());
e.printStackTrace();
}
return SUCCESS;
}

  说明:

    其中,通过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. 【bzoj3834】[Poi2014]Solar Panels 数论

    题目描述 Having decided to invest in renewable energy, Byteasar started a solar panels factory. It appea ...

  2. lua源码分析 伪索引

    Lua 提供了一个 注册表, 这是一个预定义出来的表, 可以用来保存任何 C 代码想保存的 Lua 值. 这个表可以用有效伪索引 LUA_REGISTRYINDEX 来定位. 任何 C 库都可以在这张 ...

  3. CSA Round 84 Growing Trees

    题目 题目大意 给定一棵有 $n$ 个节点的树,边的权值每天变化.对于第 $i$ 条边,在第 $0$ 天,其权值为 $c_i$,每天权值变化 $a_i$(即,在第 $k$ 天,其权值为 $c_i + ...

  4. pat 甲级 1080. Graduate Admission (30)

    1080. Graduate Admission (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  5. HTTP调试工具:Fiddler介绍

    原文发布时间为:2010-08-25 -- 来源于本人的百度文章 [由搬家工具导入] 这个工具我已经使用比较长时间了,对我的帮助也挺大,今天我翻译的微软的文章,让更多的朋友都来了解这个不错的工具,也是 ...

  6. MVC3 中使用 Ajax.ActionLink Ajax.BeginForm

    原文发布时间为:2011-05-01 -- 来源于本人的百度文章 [由搬家工具导入] http://msdn.microsoft.com/en-us/library/dd381533%28VS.98% ...

  7. 浏览器的 16ms 渲染帧

    标签 归档 关于arttle Land 浏览器的 16ms 渲染帧 DOM JavaScript 异步 性能 重绘 由于现在广泛使用的屏幕都有固定的刷新率(比如最新的一般在 60Hz), 在两次硬件刷 ...

  8. linux下的用户组管理

    用户组管理分两类 如果赋给组什么权限,那么组员就会有什么权限 1.私有组 在创建新用户的时候,就要为用户指定组.如果没有指定,就会默认创建一个与用户名相同的用户组,这个用户组只有该用户一个用户,就被称 ...

  9. Win32 OpenGL 编程( 1 ) Win32 下的 OpenGL 编程必须步骤

    http://blog.csdn.net/vagrxie/article/details/4602961 Win32 OpenGL 编程( 1 ) Win32 下的 OpenGL 编程必须步骤 wri ...

  10. Current Sourcing (拉電流) and Current Sinking(灌電流)

    Current Sourcing and Sinking Current sourcing and sinking is often mentioned in relation to electron ...