Vue.js 使用vuejs从php服务器下载文件

Vue.js 使用vuejs从php服务器下载文件,vue.js,cakephp,cakephp-3.0,Vue.js,Cakephp,Cakephp 3.0,我的应用程序运行在CakePHP上,vuejs作为前端js框架 我正在向服务器发出axios请求以生成输出文件,该文件在cakephp的webroot文件夹中生成 Api() .get('/articles/downloadFile') .then(response => { }); 如何通过vuejs下载生成的文件?您需要在axios调用中将responseType作为blob传递。像这样的 .get('/articles/downloadFile', {responseType: '

我的应用程序运行在CakePHP上,vuejs作为前端js框架

我正在向服务器发出axios请求以生成输出文件,该文件在cakephp的webroot文件夹中生成

Api()
.get('/articles/downloadFile')
.then(response => {
});

如何通过vuejs下载生成的文件?

您需要在
axios
调用中将
responseType
作为
blob
传递。像这样的

.get('/articles/downloadFile', {responseType: 'blob'})
然后,当承诺解析为在DOM中生成
href
元素并下载该项目时

.then((response) => {
    const url = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'image.png');
    document.body.appendChild(link);
    link.click();
})
我假设您正在下载一个图像,您需要为您的用例更改名称和扩展名

这里有一个完整的例子


注意:要使此功能正常工作(即使只是GET调用),您的CORS策略必须允许此调用。

您需要在
axios
调用中将
responseType
作为
blob
传递。像这样的

.get('/articles/downloadFile', {responseType: 'blob'})
然后,当承诺解析为在DOM中生成
href
元素并下载该项目时

.then((response) => {
    const url = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'image.png');
    document.body.appendChild(link);
    link.click();
})
我假设您正在下载一个图像,您需要为您的用例更改名称和扩展名

这里有一个完整的例子


注意:要使此功能正常工作(即使只是GET调用),您的CORS策略必须允许此调用。

您可以使用
window.open('/articles/downloadFile')
您可以使用
window.open('/articles/downloadFile')
我正在从服务器返回一个csv文件。我的cakephp服务器只能返回JSON响应。我正在从服务器返回一个csv文件。我的cakephp服务器只能返回JSON响应。