文件下载中文名称乱码

文章主要讨论了在Java中处理文件下载时遇到的中文文件名乱码问题,提供了一个解决方案,即使用URLEncoder.encode方法配合UTF-8编码来设置Content-disposition头,同时在前端使用decodeURI进行解码,确保文件名正确显示。此外,还涉及了Ajax请求中的arraybuffer响应类型和Blob对象的使用。
摘要由CSDN通过智能技术生成

文件下载时文件名乱码

解决方案:

Java代码设置URLEncoder.encode(filesName,StandardCharsets.UTF_8.name()),设置成new String(filesName.getBytes("utf-8","ISO-8559_1"))无效


                String filesName=s.substring(s.lastIndexOf("/") + 1);
                response.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE);
                response.setContentType(StandardCharsets.UTF_8.name());
                //防止中文乱码
                response.setHeader("Content-disposition",
                        "attachment;filename="+  URLEncoder.encode(filesName,StandardCharset                 s.UTF_8.name()));

前端设置解码decodeURI(fileName);

                   $.ajax({
                        url: "${ctx}/template/uploadLatterTemleaf",
                        type: "POST",
                        data: {"list": list},
                        xhrFields: {
                            responseType: "arraybuffer"
                        },
                        success: function (res,_,xhr) {
                            let content = xhr.getResponseHeader('content-disposition');
                            let fileName = content.split(";")[1].split("filename=")[1];
                            // const fileName = decodeURI(res.headers.get('content-disposition')).split('filename=')[1]
                            let blob = new Blob([res], {
                                type: "application/octet-stream",
                            });
                            let link = document.createElement("a");
                            link.href = window.URL.createObjectURL(blob);
                            link.download = decodeURI(fileName);
                            // link.download = '授权委托书-诉讼'
                            link.click();
                            window.URL.revokeObjectURL(link.href);
                        },
                        error: function (err) {
                            console.log(err)
                        }
                    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值