javascript - 从 axios post 检索响应数据与原始响应数据不同
问题描述
我一直在开发 Flask/Vue webapp,但遇到了关于下载文件的问题。我正在使用flask从后端提供用户上传,它通过send_from_directory()返回一个文件。这是通过 Vue 中的 downloadFile 方法调用的
downloadFile(key, name){
const path = '/api/ticket/filedownload'
this.$ajax.post(path, {address: key}, {responseType: 'arraybuffer',})
.then((response) => {
// Create response donwload link
const url = window.URL.createObjectURL(new Blob([response.data], response.headers['contentType']));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', name);
document.body.appendChild(link);
link.click();
})
.catch(error => {
console.log(error)
window.alert("File not found")
})
}
这个方法我在网上很多地方找到的,似乎对大多数人都有效。然而,在前端提供的文件“包含错误”或似乎已损坏。在我的网络选项卡中,我可以清楚地看到发布请求是成功的,并且响应是发送的实际图像(例如)!当直接在我的网络选项卡(Mozilla,鼠标右键>复制>复制响应)中复制来自帖子结果的响应时,我能够检索到响应是 base64 编码的,并且可以轻松解码为上传的相同图像。然而!打印response.data时,输出完全不同,而不是base64:
base64 from network tab: R0lGODlhWAJYAvcAABAQEL2cUntSG(etc...)
console.log(response.data):GIF89aX�X���������R{R�)�1)�1�j ���������ޔ��{)��j
我尝试直接将 response.data 作为 blob 提供,或者在文件阅读器中解析它,但无济于事。我们的 this.$ajax.post 是 axios 的 post 的一种解决方法,它可以提供 returnTypes,例如 blob、arraybuffer、text、任何东西,所有这些都具有相同的结果。我的问题是:我将如何继续访问响应,例如它显示在网络选项卡中,因为我能够从 base64 转换,而不是未知格式。或者我将如何以任何成功的方式解析此响应。
解决方案
推荐阅读
- node.js - 在函数内设置类属性
- android - 测试未能完成。原因:“由于 'keyDispatchingTimedOut',仪器运行失败”。检查设备 logcat 以获取详细信息
- pandas - 加快 pandas 中行的逻辑合并(基于条件)
- apache - 带有appache httpd服务器的websocket url抛出404错误
- angular - Angular `ng-content` 在 primeNg 表中没有按预期工作
- stripe-payments - 如何区分经常性金额与 Stripe 中的初始金额
- python - 该函数输入一个字符串列表 x 并返回一个整数 ptr
- powershell - 在 Powershell 中生成带有 X.509 证书签名的 JWT
- node.js - NodeJs 用 jsPDF 说“ReferenceError: window is not defined”
- listview - 通过 Adopter 和自定义布局项在 ListView 中显示关联数组