关于axios下载文件的问题

发布于 2022-09-13 00:12:34 字数 1059 浏览 34 评论 0

下载接口的逻辑是:下载成功返回文件流(Content-Type: application/octet-stream),下载失败返回json(如:{code:'',data:'',msg:''})。

使用axios下载文件流设置responeType:'blob'就可以了。但由于上面接口的逻辑,我只能换一个思路。如下

response => {
        

        const res = response.data

        console.log(response)
        let contentType = response.headers['content-type']

        if(contentType === 'application/octet-stream' || contentType === 'application/x-msdownload'){
            let blob = new Blob([res], {type:contentType})

            console.log(blob)
            let contentDispotion = response.headers['content-disposition']
            let filename = '';
            if(contentDispotion){
                filename = contentDispotion.split('=')[1]
            }
            // console.log(contentDispotion, filename)
            downloadBlob(blob, filename)
            return response
        }
        

        if (res.code !== 0) {

问题:我把获取的文件流转换成Blob,再进行下载,发现下载后的文件异常(打开后东西消失)。设置responeType:blob下载是正常的,排查发现我手动生成的blob比通过responeType:blob直接返回Blob的size要大。不知道是什么原因?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹沉浮 2022-09-20 00:12:34

其实你可以换一种逻辑,设置responeType:blob

然后在响应里判断

if(res.type === "application/json") {
  网上搜索Blob转json,获取到json对象了
} else {
 下载操作
}

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文