fastdfs下载文件重命名

@GetMapping(value = "/download",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "文件下载")
    public ResponseEntity<byte[]> download(String fileName, HttpServletRequest request) throws Exception{

        String url = "http://192.168.15.150:8000/group1/M00/00/0VKAbcvBAAFiABXggsY079.doc";
        HttpHeaders headers = new HttpHeaders();

        //处理IE
        String userAgent = request.getHeader("user-agent").toLowerCase();

        if (userAgent.contains("msie") || userAgent.contains("like gecko")  ||
                userAgent.contains("Trident")) {
            // win10 ie edge 浏览器 和其他系统的ie
            fileName = URLEncoder.encode(fileName, "UTF-8");
            //解决下载时,空格变加号
            fileName = org.apache.commons.lang3.StringUtils.replace(fileName, "+", "%20");
        } else {
            // fe
            fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");

            //解决下载时,空格变加号
            fileName = org.apache.commons.lang3.StringUtils.replace(fileName, "+", "%20");
        }

        //通知浏览器以attachment(下载方式)打开图片
        headers.setContentDispositionFormData("attachment",fileName); //解决原始文件名中有中文出现乱码);
        //application/octet-stream : 二进制流数据(最常见的文件下载)。
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(IOUtils.toByteArray(getFileInputStream(url)),
                headers, HttpStatus.CREATED);

    }
    //endregion

    public InputStream getFileInputStream(String urlString) {
        InputStream is = null;
        try {
            // 构造URL
            URL url = new URL(urlString);
            // 打开连接
            URLConnection con = url.openConnection();
            // 输入流
            is = con.getInputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return is;
    }

两种方式:一种如上通过输出流重命名,一种如下通过 Nginx 进行文件重命名

一:在Nginx上进行如下配置,这样Nginx就会截获url中的参数attname

if ($arg_attname ~ "^(.+)") {
    #设置下载
    add_header Content-Type application/x-download;
    #设置文件名
    add_header Content-Disposition "attachment;filename=$arg_attname";
}
如下:

二:在url后面增加一个参数,指定原始文件名

url+"?attname="+文件名

如下:

http://192.168.15.150:8000/group1/M00/00/0VKAbcvBAAFiABXggsY079.doc?attname=%E5%8D%B3%E5%BC%80%E7%A5%%98%8E%E7%BB%86-1567649164681.xlsx

  • 0
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

git_2147483647

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值