文件名称乱码,content-disposition 获取filename乱码的解决办法

1. 前端先确认是否能在响应头里获取到filename 。如果获取不到,需后端服务器设置请求头Access-Control-Expose-Headers

    /**
     * 设置headers
     * name 文件名称 "中国.xlsx"
     */
    public static HttpHeaders getHeaders(String name) {
        HttpHeaders headers = new HttpHeaders();
        //配置Access-Control-Expose-Headers,暴露Content-Disposition
        List<String> list = new ArrayList<>(2);
        list.add("Content-Disposition");
        headers.setAccessControlExposeHeaders(list);
        try{
            headers.set("Content-Disposition",     "attachment;filename="+URLEncoder.encode(name,"UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return headers;
    }

2. 后台服务器设置Content-Disposition,对文件名称转码

        第一种:

URLEncoder.encode(name,"UTF-8")

        第二种:

new String(name.getBytes("GBK"),"ISO-8859-1"))

3. 后台服务端设置完毕。再看前端,对filename进行解码操作

const fileName = decodeURI(res.headers.get('content-disposition')).split('filename=')[1]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值