为了账号安全,请及时绑定邮箱和手机立即绑定

处理来自 api 调用的文件下载

处理来自 api 调用的文件下载

沧海一幻觉 2023-08-10 15:19:37
在反应中,axios.post('api/downloadMyFile',             data           ).then((response) => {                         const url = window.URL.createObjectURL(new Blob([response.data]))              const a = document.createElement('a');             a.href = url;             a.download = "test.zip"               document.body.appendChild(a);             a.click();             window.URL.revokeObjectURL(url);                   }).catch((err) => {                    } 所以文件test.zip正在下载。但是当我保存后尝试打开它时,我在 Windows 中收到压缩 Zip 文件夹错误。另外,我注意到我不需要在行中指定文件的名称,a.download = "test.zip"  因为网络服务正在从共享存储中获取文件并且它已经有一个名称。那么在这种情况下,我是否还需要在response对象中包含文件名?类似的东西response.filename,这样我就可以在下面的行中使用它,而不是手动命名它:a.download = response.filename 
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

axios.post('api/downloadMyFile', 

            data

           ).then((response) => {

            

             const url = window.URL.createObjectURL(new Blob([response.data])) 


             const a = document.createElement('a');


             a.href = url;

             a.download = "test.zip"  

             document.body.appendChild(a);

             a.click();

             window.URL.revokeObjectURL(url);



           

        }).catch((err) => {

            

        } 

所以文件test.zip正在下载。但是当我保存后尝试打开它时,我在 Windows 中收到压缩 Zip 文件夹错误。


另外,我注意到我不需要在行中指定文件的名称,a.download = "test.zip"  因为网络服务正在从共享存储中获取文件并且它已经有一个名称。那么在这种情况下,我是否还需要在response对象中包含文件名?类似的东西response.filename,这样我就可以在下面的行中使用它,而不是手动命名它:


a.download = response.filename 


查看完整回答
反对 回复 2023-08-10
?
呼如林

TA贡献1798条经验 获得超3个赞

尝试这两行从响应对象中获取文件名


var filename = response.headers.get("content-disposition");

filename = filename.match(/(?<=")(?:\\.|[^"\\])*(?=")/)[0];


查看完整回答
反对 回复 2023-08-10
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号