struts2实现文件查看、下载

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

Author:Marydon

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对象

时间: 2024-10-05 23:49:50

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

struts2实现文件批量下载

大家都知道struts2提供了文件下载的功能,很方便很好用.废话不多说直接开始. 首先我们先对struts.xml进行配置,struts2的result 类型设为stream,请看如下配置: <span style="font-size:18px;"> <result name="toDownload" type="stream"> <param name="bufferSize">2048

struts2进行文件的下载

首先搭建好struts2的开发环境,先新建一个下载的页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My

struts2实现文件的下载

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.编写下载文件的action.(做测试前现在WebRoot路径下建一个upload文件夹,里面放你要下载文件)该类为FileDownload.action</span> <pre name="code" class="java"

struts2实现文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

用struts2实现文件的上传下载

在做B/S系统时经常会有文件上传下载的需求,现就基于struts2框架实现其功能 Struts2框架默认采用Commons-fileupload组件完成文件上传功能.? 使用Struts2框架实现文件上传功能,只需在Action中定义一个java.io.File类型的成员并为之设立setter方法,方法名要和参数名对应.? 客户端上传的文件, Struts2框架会自动将其保存在临时文件中,封装成java.io.File类对象.如果还想得到上传的文件名和文件类型,需按照如下命名规则在Action中

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

一.实现单个文件上传 1.创建如下web项目结构 2.在src下的com.action包下创建UploadAction.java 1 package com.action; 2 import java.io.File; 3 4 import javax.servlet.ServletContext; 5 6 import org.apache.commons.io.FileUtils; 7 import org.apache.struts2.ServletActionContext; 8 9 i

Struts2控制文件的上传与下载

Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制数据发送给数据. (2)Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此,如果需要使用Struts2的文件上传功能,则需要在web应用中增加两个JAR文件,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar

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

一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST"方式,并且将enctype属性设置为"multipart/form-data",该属性的默认值为"application/x-www-form-urlencoded",就是说,表单要写成以下这种形式: <form action="" metho

Struts2之文件上传下载

本篇文章主要介绍如何利用struts2进行文件的上传及下载,同时给出我在编写同时所遇到的一些问题的解决方案. 文件上传 前端页面 1 <!-- 引入struts标签 --> 2 <%@taglib prefix="s" uri="/struts-tags"%> 3 4 <!-- 5 使用struts中的<s:file></s:file>标签来选择文件. 6 设置name属性,则提交后将传递后给后台一个name属性