Node.js 从expressJS(sendFile)服务器下载文件到VueJS,是否返回损坏的文件?

Node.js 从expressJS(sendFile)服务器下载文件到VueJS,是否返回损坏的文件?,node.js,express,vue.js,vuejs2,blob,Node.js,Express,Vue.js,Vuejs2,Blob,我有一个用expressjs编写的API,当提供文件ID时,它会发送一个文件 后端工作正常,因为当直接在浏览器中键入路由url时,它会发送正确的文件(未损坏)。 例如(下载所有文件,如ie.txt、xlsx、jpg、zip) 我的express route实际上使用res.download,它实际上是sendFile的一个包装器 当我尝试从Vue http get请求调用这些路由URL时,它只返回未损坏的txt文件。所有其他文件都可以下载,但由于损坏,它们可以打开 有人能告诉我为什么Vue不起作

我有一个用expressjs编写的API,当提供文件ID时,它会发送一个文件

后端工作正常,因为当直接在浏览器中键入路由url时,它会发送正确的文件(未损坏)。 例如(下载所有文件,如ie.txt、xlsx、jpg、zip)

我的express route实际上使用res.download,它实际上是sendFile的一个包装器

当我尝试从Vue http get请求调用这些路由URL时,它只返回未损坏的txt文件。所有其他文件都可以下载,但由于损坏,它们可以打开

有人能告诉我为什么Vue不起作用吗

为清楚起见,“item”作为参数传递到此函数

        this.$http.get("http://localhost:8000/files/download", {params:{id:item._id}}, {responseType: 'arraybuffer'})
      .then(response => {

        var blob = new Blob([response.data], {type:response.headers.get('content-type')});

        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = item.filename;
        link.click();
      })

作为参考,这是我的快速路线

向@Helpinghand大声呼喊,以帮助我解决此问题

“我在您发布的链接中找到了解决方案。问题是,在分配“内容类型”之前,我在它自己的对象中显式发送参数。您发布的示例将查询参数连接到url。在进行此切换后,它工作得非常好。”


尝试将responseType更改为blobAlso
新Blob([response.data],{type:“text/plain”})
。看看这个works@Helpinghand谢谢你的建议!不幸的是,它仍然返回损坏的JPG、ZIP和xlsx文件。当它变成一个blob时,一定会把它搞砸。我考虑将每个文件的src属性绑定到一个“计算”字符串,因为直接在浏览器中键入路由可以正确下载它们。但我觉得,一旦我以后实现了身份验证(并删除了对所有人开放的cors),这就不够了。我找到了这个,
键入:“application/pdf”
我认为[response.body]应该是[response.data],至少这对我来说是有效的!
this.$http.get(`http://localhost:8000/files/download?id=${item._id}`, {responseType: 'arraybuffer'})
      .then(response => {
        console.log(response.headers.get('content-type'));
        console.log(response);

        var blob = new Blob([response.body], {type:response.headers.get('content-type')});

        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = item.filename_version;
        link.click();
      })