java 返回浏览器下载文件

@RequestMapping("downloadFile")
    public String downloadFile(HttpServletRequest request,
                               HttpServletResponse response,String fileName){
        if(StringUtils.isNotBlank(fileName)){
            String zipFileName = fileName+".zip";
            File file = new File(rootPath+zipFileName);
            if(file.exists()){
                byte[] buffer = new byte[1024];
                FileInputStream fis = null;
                BufferedInputStream bis = null;
                OutputStream os = null;
                String finalFileName = "";
                try {
                    final String userAgent = request.getHeader("USER-AGENT");
                    if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent,"Trident")){//IE浏览器
                        finalFileName = URLEncoder.encode(zipFileName,"UTF8");
                    }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
                        finalFileName = new String(zipFileName.getBytes(), "ISO8859-1");
                    }else{
                        finalFileName = URLEncoder.encode(zipFileName,"UTF8");//其他浏览器
                    }
                    response.setCharacterEncoding("UTF-8");
                    response.setContentType("application/force-download");// 设置强制下载不打开
                    response.addHeader("Content-Disposition", "attachment;fileName=" + finalFileName);// 设置文件名
                    fis = new FileInputStream(file);
                    bis = new BufferedInputStream(fis);
                    os = response.getOutputStream();
                    int i = bis.read(buffer);
                    while (i != -1) {
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                    return "下载成功";
                }catch (Exception e){

                }finally {

                    if(fis != null){
                        try {
                            fis.close();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                    if(bis != null){
                        try {
                            bis.close();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                    if(os != null){
                        try {
                            os.flush();
                            os.close();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        return "下载失败";
    }

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值