我已经被困在这一段时间了,而且我已经没有选择了。我需要从Node.js Express服务器下载文件到Vue.js客户端。我有一个按钮,当点击它时,触发服务器上的终点,似乎能够毫无问题地运行res.download
。这是我的代码:
var thisPath = path.resolve(".") + '/public/' + 'test.txt';
console.log(thisPath)
res.download(thisPath, function (err) {
if (err){
console.log(err)
}
else{
console.log('download complete')
}
});
console.log
输出的文件路径是正确的,我很确定res.download
能够找到该文件,如果我输入了无效路径,则会记录错误告诉我。相反,我只是“下载完成”,但浏览器中没有任何反应,控制台中没有任何错误消息,没有。
我尝试过手动设置标题:
// res.setHeader('Content-disposition', 'attachment; filename=test.txt');
// res.set("Content-Type", "text/plain");
我尝试过使用相对和绝对文件路径,并尝试使用path.resolve
。每次,我相信它正在找到文件,因为我得到'下载完成'输出但在浏览器中仍然没有。
我需要在客户端做点什么吗?以下是我的代码:
download : function () {
SimulationService.downloadSimulation(this.SimulationParameters.simulationFilePath)
console.log('downloaded')
}
注意:这一切都运行没有错误 - 在浏览器控制台中输出“已下载”。
downloadSimulation (simulationFilePath) {
return Api().post('/download', { simulationFilePath })
},
import axios from 'axios'
export default () => {
return axios.create({
baseURL: 'http://localhost:8081/'
})
}
事实上,我需要能够从服务器目录之外的位置下载文件。目前,我正在努力从公共目录下载文本文件。
任何帮助或建议将不胜感激! 提前谢谢。
编辑:
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Connection: keep-alive
Content-Disposition: attachment; filename="test.txt"
Content-Length: 13
Content-Type: text/plain; charset=UTF-8
Date: Sat, 21 Apr 2018 18:56:40 GMT
ETag: W/"d-162e9839664"
Last-Modified: Sat, 21 Apr 2018 18:42:17 GMT
X-Powered-By: Express
发现'内容长度'会根据文本文档中的内容而发生变化。 13用于“Hello World”,换行。