Angular Express从服务器下载文件的正确方法

时间:2017-02-06 14:21:39

标签: javascript node.js express

基本上下面的代码有效。我点击按钮,按钮将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);
        });
    }

0 个答案:

没有答案