美文网首页
responseType使用post方法下载文件

responseType使用post方法下载文件

作者: 小豆soybean | 来源:发表于2020-03-06 13:15 被阅读0次

使用post下载后端返回的excel文件踩的坑。获取到数据之后下载打不开文件,提示格式错误,响应数据类型是application/zip,自己并没有解析出来,但是可以通过curl命令下载下来。折腾一阵之后大佬指点,最后通过在请求接口的响应时候,设置responseType=arrayBuffer,返回的数据使用new Blob([data])创建一个url解决了。在后端返回错误信息按照arraybuffer解析的json数据格式时,在response的catch里 捕获,将arraybuffer数据处理为

JSON.parse(Buffer.from(err.response.data).toString('utf8'));

并返回。就可以解析了。

**XMLHttpRequest.responseType **属性是一个枚举类型的属性,返回响应数据的类型。它允许我们手动的设置返回数据的类型。如果我们将它设置为一个空字符串,它将使用默认的"text"类型。

在工作环境(Work Environment)中将responseType的值设置为"document"通常会被忽略. 当将responseType设置为一个特定的类型时,你需要确保服务器所返回的类型和你所设置的返回值类型是兼容的。那么如果两者类型不兼容呢?恭喜你,你会发现服务器返回的数据变成了null,即使服务器返回了数据。还有一个要注意的是,给一个同步请求设置responseType会抛出一个InvalidAccessError 的异常。

responseType支持以下几种值:

描述
"" responseType 设为空字符串与设置为"text"相同, 是默认类型 (实际上是 DOMString)。
"arraybuffer" response 是一个包含二进制数据的 JavaScript ArrayBuffer
"blob" response 是一个包含二进制数据的 Blob 对象 。
"document" response 是一个 HTML DocumentXML XMLDocument ,这取决于接收到的数据的 MIME 类型。请参阅 HTML in XMLHttpRequest 以了解使用 XHR 获取 HTML 内容的更多信息。
"json" response 是一个 JavaScript 对象。这个对象是通过将接收到的数据类型视为 JSON 解析得到的。
"text" response 是包含在 DOMString 对象中的文本。
"moz-chunked-arraybuffer"

"arraybuffer"相似,但是数据会被接收到一个流中。使用此响应类型时,响应中的值仅在 progress 事件的处理程序中可用,并且只包含上一次响应 progress 事件以后收到的数据,而不是自请求发送以来收到的所有数据。

progress 事件处理时访问 response 将返回到目前为止收到的数据。在 progress 事件处理程序之外访问, response 的值会始终为 null

|
| "ms-stream" | response 是下载流的一部分;此响应类型仅允许下载请求,并且仅受Internet Explorer支持。 |

相关文章

网友评论

      本文标题:responseType使用post方法下载文件

      本文链接:https://www.haomeiwen.com/subject/dowhrhtx.html