基本上下面的代码有效。我点击按钮,按钮将filePath数据发送到服务器。服务器方法res.download
将文件作为字符串发送。然后在客户端上创建一个带有href和下载属性的锚点。但是当我尝试下载.xls
文件或.zip
时,它会下载它们但它们已损坏。我想
'data:application/octet-stream,' + encodeURIComponent(response)
当文件不是.txt或.log 时,会导致问题
服务器:
app.post('/download', (req, res) => {
let file = path.join(__dirname, 'public/files', req.body.filePath);
res.download(file, req.body.filePath);
});
客户端:
function downloadFile(filePath) {
return $http({
url: '/download',
method: "POST",
data: { filePath: filePath }
}).then((response) => {
return response.data;
}).catch(err => console.err);
}
function fileDownload(filePath, fileExtension) {
let file = filePath + '.' + fileExtension;
downloadFile(file).then((response) => {
let a = document.createElement('a');
a.setAttribute('style', 'display:none');
a.setAttribute('href', 'data:application/octet-stream,' + encodeURIComponent(response));
a.setAttribute('download', (filePath || 'Export') + '.' + fileExtension)
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
});
}