我有一个Axios请求下载。xls文件。问题是,作为后端响应返回的对象并不总是必须是真实的文件。如果我返回json对象而不是文件数据。那么我将如何阅读这个json呢?
以下是函数:
downloadReport() {
let postConfig = {
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
responseType: 'blob',
} as AxiosRequestConfig
axios
.post(this.urls.exportDiscountReport, this.discount.id, postConfig)
.then((response) => {
let blob = new Blob([response.data], { type: 'application/vnd.ms-excel' });
let url = window['URL'].createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.download = this.discount.id + ' discount draft.xlsx';
a.click();
window['URL'].revokeObjectURL(url);
})
.catch(error => {
})
}
我想阅读响应,如果其中包含一些数据-不要创建blob并启动下载,而是显示一些消息或其他内容。如果我删除responseType:'blob',则。xls文件下载为不可读且无效的文件。
因此,问题是每个返回的响应都变成Blob类型,我在其中看不到返回的数据。有什么想法吗?
您是否尝试过检查响应Blob.type
属性?它给出返回数据的MIME类型。
例如,你可以有这样的东西:
const jsonMimeType = 'application/json';
const dataType = responseBlob.type;
// The instanceof Blob check here is redundant, however it's worth making sure
const isBlob = responseBlob instanceof Blob && dataType !== jsonMimeType;
if (isBlob) {
// do your blob download handling
} else {
responseBlob.text().then(text => {
const res = JSON.parse(text);
// do your JSON handling
});
}
我发现这更简单,对我有效,但它取决于您的后端设置。BLOB响应仍然是文本响应,但处理方式略有不同。
我通过读取blob响应并检查它是否具有JSON参数状态来解决这个问题。但在我看来,这似乎是一个过度工程。有更好的解决办法吗?
let postConfig = {
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
responseType: 'blob',
} as AxiosRequestConfig
axios
.post(this.urls.exportDiscountReport, this.discount.id, postConfig)
.then((responseBlob) => {
const self = this;
let reader = new FileReader();
reader.onload = function() {
let response = { status: true, message: '' };
try {
response = JSON.parse(<string>reader.result);
} catch (e) {}
if (response.status) {
let blob = new Blob([responseBlob.data], { type: 'application/vnd.ms-excel' });
let url = window['URL'].createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.download = self.discount.id + ' discount draft.xlsx';
a.click();
window['URL'].revokeObjectURL(url);
} else {
alert(response.message)
}
}
reader.readAsText(responseBlob.data);
})
.catch(error => {
})
我在这里也找到了同样的解决方案:https://github.com/axios/axios/issues/815#issuecomment-340972365
看起来还是太老套了。
客户端在关于 JSON 数组和 JSON 对象的处理和定义方面总是令人疑惑不已。尤其是由空对象和对象数组引起的问题。本节会展示一些 Elasticsearch JSON API 常见的数据格式,还会说明如何以 PHP 的语法来表达这些数据格式。 空对象 Elasticsearch API 在几个地方使用了空对象,这会对 PHP 造成影响。不像其它的语言,PHP 没有一个简便的符号来表示空对象,而许
问题内容: 我需要一个易于使用的示例库,用于将NSObjects转换为JSON并再次返回,我在网上发现了大量用于解析JSon的解析示例,但是在使用SBJSON将NSObject转换为JSON时并不过分,任何人都有不错的教程或将NSObject转换为JSON的示例代码? 问题答案: 使用,将对象转换为JSON字符串,您必须重写方法。像下面这样 .h文件, 在实施文件中, 为了从JSON字符串中获取对
我想解析一些JSON,但一个键要么是字符串,要么是对象。 这是我当前的结构:https://github.com/PhillippOhlandt/pmtoapib/blob/master/CollectionItemRequest.go#L10 在这里,“Url”属性不仅可以是字符串,还可以是对象。 我开始为它创建一个自己的结构,覆盖对象案例。 但是这样字符串版本就不行了。有没有一种方法既能处理这
问题内容: 我需要JSON polyfill以支持IE 7以及某些IE 8和IE 9模式。我应该选择JSON 2 还是JSON 3 ?显然,JSON 3是更现代的实现,但是例如html5please这样的网站甚至都没有提及它,并建议使用JSON 2。 问题答案: HTML5 Please已更新其JSON页面,以将 JSON 3 包括在内以用作主要的polyfill,而JSON 2则是后排替代品。
问题内容: 我想使用https://raw.github.com/currencybot/open-exchange- rates/master/latest.json 提供的货币数据 作为初始测试,我已经创建了它的简化版本作为内联对象: 我想要做的就是以某种方式使用例如“ EUR”作为条件查询/ grep /过滤json对象,并使其返回一个名为“ rate”的变量,其结果为“ 0.795767”
我在一个保存为记事本文件的文件中有以下简单的json 我正在尝试使用打开它 我已经尝试按照本页的建议创建绝对路径,但它也会产生值错误。有人能帮忙吗?