阿里云改名并下载文件,乱码问题解决

本文记录了一位开发者在阿里云下载文件时遇到的问题。最初通过第三方链接下载文件导致文件名乱码,原因是read和write方法使用不当,修正后解决了乱码问题。此外,还发现阿里云允许在上传时直接设置下载文件名,避免了复杂的下载过程。
摘要由CSDN通过智能技术生成

一个恶心的坑记录下。

刚开始不知道阿里云可以通过直接设置下载文件名,所以从网上查到链接

  • https://blog.csdn.net/weixin_45861283/article/details/111597661

所以写了一个获取链接然后下载的代码:

@RequestMapping(value = "/downloadAttac", method = RequestMethod.GET, produces = "application/octet-stream")
    public void download(String url, String fileName, HttpServletRequest request, HttpServletResponse response) {
        if (!url.startsWith("http")) {
            url = "http:".concat(url);
        }
        fileName = URLUtil.decode(fileName);
        // 下载本地的文件
        try {
            // 把文件从第三方服务器下载到当前服务器本地
            URL url2 = new URL(url);
            URLConnection conn = url2.openConnection();
            InputStream inputStream = conn.getInputStream();
            response.reset();
            response.setContentType(conn.getContentType());
            OutputStream os = response.getOutputStream();
            BufferedOutputStream bos = new BufferedOutputStream(os);
            try {
                BufferedInputStream bis = new BufferedInputStream(inputStream);
                try {
                    response.setContentType("application/x-msdownload");
                    response.setHeader("Content-Disposition",
                            "attachment; filename="
                                    + URLEncoder.encode(fileName, "UTF-8"));
                    byte[] read = new byte[1024];
                    while (bis.read(read) != -1) {
                        bos.write(read);
                    }
                    bos.flush();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    bis.close();
                    inputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                bos.close();
                os.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    

但是发现下载下来的文件是乱码。看了下代码,才发现是read和write方法写错了,因为是同时从网络上获取,每次不会取满1024字节,所以每次都有些空字节传进去,就会有问题。改成这样就好了:

                    int len = 0;
                    while ((len = bis.read(read)) != -1) {
                        bos.write(read, 0, len);
                    }   

后来才发现,阿里云在上传的时候,可以设置下载的名称,就不用这么转折的方法了,添加下面的代码即可

let _self = this;
_self.dataObj['Content-Disposition'] = "attachment;filename=" + file.name;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值