java通过response下载文件

需要注意两个地方:

          1:IE下会乱码,所以需要用userAgent那个部分来处理

          2:进入方法以后不会下载,没有反应,我这边的情况是因为我用了AJAX提交,所以要解决这个问题

                    1:设置AJAX参数

                    2:换一种请求方法,不用AJAX

public ActionForward creatCollectFileReport(ActionMapping mapping,
            ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String filePath = getMyParamPlus(request, "filePath", "");
        String userAgent = request.getHeader("User-Agent");
        String fileName = "";
        int start = filePath.lastIndexOf("/");
        if (start != -1) {
            fileName = filePath.substring(start + 1);
        }
        StringBuffer localStringBuffer = new StringBuffer(50);
        FileInputStream localFileInputStream = null;
        BufferedOutputStream localBufferedOutputStream = null;
        File localFile1 = new File(filePath);
        if ((localFile1 != null) && (localFile1.exists())
                && (localFile1.isFile())) {
            long l = localFile1.length();
            try {
                localFileInputStream = new FileInputStream(localFile1);
                response.reset();
                response.setContentType("application/octet-stream");
                response.setContentLength((int) l);
                // 针对IE或者以IE为内核的浏览器:
                if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
                    fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
                } else {
                    // 非IE浏览器的处理:
                    fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
                }
                response.setHeader("Content-Disposition","attachment;filename="+ new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
                
                
                localBufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
                try {
                    byte[] arrayOfByte1 = new byte[2048];
                    int i;
                    while ((i = localFileInputStream.read(arrayOfByte1)) > 0) {
                        localBufferedOutputStream.write(arrayOfByte1, 0, i);
                    }
                    localBufferedOutputStream.flush();
                } catch (Exception localException2) {
                }
                localBufferedOutputStream.close();
                localFileInputStream.close();
            } catch (Exception localException3) {

            }
        }
        try {
            if (localBufferedOutputStream != null) {
                localBufferedOutputStream.flush();
                localBufferedOutputStream.close();
            }
            if (localFileInputStream != null) {
                localFileInputStream.close();
            }
        } catch (Exception localException1) {
        }
        return null;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值