zoukankan      html  css  js  c++  java
  • struts2的单文件下载

    一、 导入两个jar包

      commons-fileupload-1.3.1.jar

      commons-io-2.4.jar

    二、编写请求上传jsp

    <h1>文件列表--单文件</h1>
    <div>
        <span>
            <img alt="" src="/imgs/${fileFileName }" width="100">
        </span>
        <a href="upload_download/download_file.action?filename=${fileFileName }">download</a>
    </div>

    三、编写action

    package com.struts2.fileuplad.action;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import javax.servlet.http.HttpServletRequest;
    import com.struts2.util.BaseAware;
    public class FileDownloadAction extends BaseAware {
        private static final long serialVersionUID = 9084172624901427828L;
        private String filename;
        //该方法会被对应的请求action中result的参数调用
        public String getFilename() {
            return filename ;
        }
        public void setFilename(String filename) throws UnsupportedEncodingException {
            this.filename = filename;
        }
        @Override
        public String execute() {
            return SUCCESS;
        }
        //该方法被对应的请求action中result的参数调用
        //即:<param name="contentDisposition">attachment;fileName="${downloadFileName}"</param>  
        public String getDownloadFileName() throws UnsupportedEncodingException{
            //使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 
            // 构造一个新的 String,运用指定的字符集解码指定的字节数组。 
            //这里本该设置为UTF-8 但是IE依然显示乱码  换成GBK之后基本可以全部兼容了,有问题可以再修改
            return this.filename = new String(filename.getBytes("GBK"),"ISO-8859-1");
        }
        private HttpServletRequest request;
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
        //该方法被对应的请求action中result的参数调用
        //即:<param name="inputName">inputStream</param>
        public InputStream getInputStream() throws FileNotFoundException, UnsupportedEncodingException {
                String fileapath = request.getServletContext().getInitParameter("struts2_upload_imgs_path") ;
                File file = new File(fileapath + File.separator + filename);
                FileInputStream fis = new FileInputStream(file);
            return fis;
        }
    }

    四 、 配置struts.xml

    <!-- 其中主要使用的参数是:
    contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制 
    inputName 流对象名 —— 比如这里写inputStream,它就会自动去找Action中的getInputStream方法。 
    contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。
                        该项目中调用的是getDownloadFileName()方法 
    bufferSize 下载文件的缓冲大小 -->
    <action name="download_file" class="com.struts2.fileuplad.action.FileDownloadAction">
        <result type="stream">
           <param name="contentType">application/octet-stream</param>  
           <param name="contentDisposition">attachment;fileName="${downloadFileName}"</param>  
            <param name="inputName">inputStream</param>
           <param name="bufferSize">1024</param>  
        </result>
    </action>
  • 相关阅读:
    <自动化测试方案_5>第五章、代码单元自动化测试
    <自动化测试方案_4>第四章、选型标准
    <自动化测试方案_3>第三章、怎么样实现自动化测试?(How)
    Jmeter Beanshell 用法
    Jmeter调用自定义jar包
    JMeter中文返回乱码
    项目如何提测?
    JMeter 接口测试基础
    JMeter接口测试_参数化
    mac /linux vi/vim永久显示行号开启高亮模式
  • 原文地址:https://www.cnblogs.com/myjavalife/p/4923236.html
Copyright © 2011-2022 走看看