Express res.download无效

时间:2018-04-21 17:32:43

标签: javascript node.js ajax express download

我已经被困在这一段时间了,而且我已经没有选择了。我需要从Node.js Express服务器下载文件到Vue.js客户端。我有一个按钮,当点击它时,触发服务器上的终点,似乎能够毫无问题地运行res.download。这是我的代码:

SimulationController.js

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。每次,我相信它正在找到文件,因为我得到'下载完成'输出但在浏览器中仍然没有。

我需要在客户端做点什么吗?以下是我的代码:

ViewSimulation.vue

download : function () {
    SimulationService.downloadSimulation(this.SimulationParameters.simulationFilePath)
    console.log('downloaded')
}

注意:这一切都运行没有错误 - 在浏览器控制台中输出“已下载”。

SimulationService.js

downloadSimulation (simulationFilePath) {
    return Api().post('/download', { simulationFilePath })
},

Api.js

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”,换行。

0 个答案:

没有答案