Springboot 下载csv文件

 上代码:

        XXXFileEntity xxxFileEntity = xxxFileService.getById(id);
        if (null == xxxFileEntity || xxxFileEntity.getDeleted()==1){
            return Result.error("下载的内容不存在");
        }
        if (xxxFileEntity.getDownState()==0 || xxxFileEntity.getDownState()==3 ){
            return Result.error("下载的内容暂不可下载,稍后重试");
        }
        String fileName = xxxFileEntity.getFileName();// 设置文件名,根据业务需要替换成要下载的文件名
        if (fileName != null) {
            //设置文件路径
            String realPath = xxxFileEntity.getFilePath();
            File file = new File(realPath,fileName);
            if (file.exists()) {
                String utf = "UTF-8";
                // 设置响应
                response.setContentType("application/ms-txt.numberformat:@");
                response.setCharacterEncoding(utf);
                response.setHeader("Pragma", "public");
                response.setHeader("Cache-Control", "max-age=30");
                response.setHeader("Access-Control-Expose-Headers","filename,Content-Disposition");
                response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, utf));
                response.setHeader("filename",  URLEncoder.encode(fileName, utf));
                byte[] buffer = new byte[1024];
                FileInputStream fis = null;
                BufferedInputStream bis = null;
                try {
                    fis = new FileInputStream(file);
                    bis = new BufferedInputStream(fis);
                    OutputStream os = response.getOutputStream();
                    os.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});
                    int i = bis.read(buffer);
                    while (i != -1) {
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                    System.out.println("download success");
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (bis != null) {
                        try {
                            bis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (fis != null) {
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        return null;

重点是请求头设置


response.setHeader("Access-Control-Expose-Headers","filename,Content-Disposition");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, utf));
response.setHeader("filename",  URLEncoder.encode(fileName, utf));

设置前端可以查看的请求头

response.setHeader("Access-Control-Expose-Headers","filename,Content-Disposition");

下面写入文件名:

response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, utf));
response.setHeader("filename",  URLEncoder.encode(fileName, utf));

前端通过decodeURICompone进行文件名解码,通过a标签下载即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值