我的问题与此类似,没有答案。我试着搜索其他很多地方,但仍然没有答案。
return new Promise((resolve, reject) => {
Axios.get(`${fileDownloadUrl}`,
{ responseType: 'blob' } // Blob doesn't handle errors
).then(response => {
let byteData = response.data
var blob = new Blob([byteData], {type: response.headers['content-type']})
let fileName = _.split(response.headers['content-disposition'], '=')
FileSaver.saveAs(blob, fileName[1])
resolve(fileName[1])
},
error => {
console.log(error.response.data) // returns Blob - error message from service is not handled
reject(error.response.data)
}
)
我从上面的代码中删除了{响应类型:'blob'}
,然后再试一次,我现在得到了错误消息,但是下载的文件没有任何内容,它是一个空白数据。
如何下载文件并处理服务返回的错误响应?
import axios from "axios";
// It is needed to handle when your response is not Blob (for example when response is json format)
axios.interceptors.response.use(
response => {
return response;
},
error => {
if (
error.request.responseType === 'blob' &&
error.response.data instanceof Blob &&
error.response.data.type &&
error.response.data.type.toLowerCase().indexOf('json') != -1
) {
return new Promise((resolve, reject) => {
let reader = new FileReader();
reader.onload = () => {
error.response.data = JSON.parse(reader.result);
resolve(Promise.reject(error));
};
reader.onerror = () => {
reject(error);
};
reader.readAsText(error.response.data);
});
}
return Promise.reject(error);
}
);
// Now you can get response in both Blob and json format
axios.get(
url,
{
responseType: 'blob'
}
).then(response => {
// Your Code
}).catch((error) => {
// Your Code
// You can get error in json format
});
使用vue资源解决了这个问题。虽然它将在未来的版本中退役,但我找不到更好的方法来做这件事,因为Axios无法处理它。
代码如下:
main.js
import VueResource from 'vue-resource'
Vue.use(VueResource)
服务js
return new Promise((resolve, reject) => {
VueResource.http.get(`${fileDownloadUrl}`,
{ responseType: 'blob' }
).then(response => {
methods.downloadFile(response, cid)
resolve(cid)
}, error => {
reject(error)
})
})
希望这能有所帮助。
我在VueJS应用程序中使用带有Axios的blob responseType从服务器下载文档。当响应代码为200时,它可以正常工作并下载文件,但当出现任何http错误时,我无法在捕获错误时读取状态代码,因为错误是JSON响应。 是否有人遇到过类似的问题,并找到了将blob响应类型转换为json并根据状态代码抛出错误的方法 我曾尝试从Laravel后端以纯文本形式发送响应,并尝试在前端将响应转换为
我使用的是Netty 4.0.33-Final中的LengthFieldBasedFrameDecoder类。 我正在开发的软件可以在没有Netty的帮助下与电视通信,所以我在这里以非传统的方式使用Netty。我只是使用Netty作为解码器和通道管道来解码来自各种不同设备的消息。那至少是我的目标。 问题是LengthFieldBasedFrameDecoder将长度字段解释为十六进制值0x38,并
我对vue.js非常陌生,现在我正在尝试使用https://ly525.github.io/material-vue-daterange-picker/guide.html#Introduction中的vue.js datepicker 但是当我导入要使用的脚本时,我会得到这样的消息 “VMDDateRangePicker”已声明,但其值从未读取。TS(6133)找不到模块“v-md-date-r
通过对错误类型实现 Display 和 From,我们能够利用上绝大部分标准库错误处理工具。然而,我们遗漏了一个功能:轻松 Box 我们错误类型的能力。 标准库会自动通过 Form 将任意实现了 Error trait 的类型转换成 trait 对象 Box<Error> 的类型(原文:The std library automatically converts any type that imp
由于每个实体都有BLOB字段,我的Java应用程序变得非常慢。该字段通常用于存储PDF文件,每当我必须列出所有对象时,都需要相当长的时间,直到持久性提供程序可以完成其工作。我寻找有关如何处理此类数据的答案,但其中一些人谈到将BLOB存储在单独的表中,然后使用FetchType.LAZY.是否有任何方法仅在需要时获取此字段而无需创建另一个表?如果没有,创建另一个表是最合适的解决方案吗? 实体代码 导
我有一个Axios请求下载。xls文件。问题是,作为后端响应返回的对象并不总是必须是真实的文件。如果我返回json对象而不是文件数据。那么我将如何阅读这个json呢? 以下是函数: 我想阅读响应,如果其中包含一些数据-不要创建blob并启动下载,而是显示一些消息或其他内容。如果我删除responseType:'blob',则。xls文件下载为不可读且无效的文件。 因此,问题是每个返回的响应都变成B