首页 > 其他 > 详细

struts2的单文件下载

时间:2015-11-06 00:04:27      阅读:297      评论:0      收藏:0      [点我收藏+]

一、 导入两个jar包

  commons-fileupload-1.3.1.jar

  commons-io-2.4.jar

二、编写请求上传jsp

技术分享
<h1>文件列表--单文件</h1>
<div>
    <span>
        <img  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>

struts2的单文件下载

原文:http://www.cnblogs.com/xujianbo/p/4941114.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!