猿问

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

在反应中,

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 


沧海一幻觉
浏览 156回答 2
2回答

蛊毒传说

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 

呼如林

尝试这两行从响应对象中获取文件名var filename = response.headers.get("content-disposition");filename = filename.match(/(?<=")(?:\\.|[^"\\])*(?=")/)[0];
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答