responseType: ‘blob‘的请求,失败怎么获取失败信息

当响应类型为application/json时,代码尝试读取并解析JSON数据,如果解析失败则显示错误信息。否则,它将数据转换为JPEG图像并进行下载,动态创建并使用a标签实现文件下载功能。
部署运行你感兴趣的模型镜像
 if (res?.type == "application/json") {
//导出失败
    const reader = new FileReader() as any
    let parseObj = null as any
    reader.readAsText(res, 'utf-8')
    reader.onload = await function () {
      parseObj = JSON.parse(reader.result)
      message.error(parseObj.msg || "操作失败")
    }
  } else {
//解析成功,开始导出
let blob = new Blob([res], {
      type: 'image/jpeg'  // 下载的文件类型格式(二进制流,不知道下载文件类型可以设置为这个), 具体请查看HTTP Content-type 对照表
    })
    let url = URL.createObjectURL(blob)
    let a = document.createElement('a')
    a.style.display = 'none'
    a.href = url
    a.setAttribute('download', 'img.jpg')   // 设置下载的文件名
    document.body.appendChild(a)
    a.click()
    document.body.removeChild(a)       //下载完成移除dom元素
    URL.revokeObjectURL(url)
}

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

### `responseType: 'blob'` 是否是请求头的一部分? 在 Vue.js 前端开发中,`responseType: 'blob'` 并不是 HTTP 请求头(Request Headers)的一部分,而是 XMLHttpRequest 或 Axios 等 HTTP 客户端提供的配置选项,用于指定响应数据的类型。该配置项决定了浏览器如何解析服务器返回的数据内容,而不是作为请求头发送给服务器的信息[^2]。 例如,在使用 Axios 发送请求时,设置 `responseType: 'blob'` 的代码如下: ```javascript axios.get('/api/data', { responseType: 'blob' }).then(response => { // 处理二进制数据 }); ``` 此配置告知浏览器将响应体视为 `Blob` 类型的数据,适用于下载文件、处理图像流或音频视频等场景。与请求头中的 `Content-Type` 和 `Accept` 不同,它不会出现在实际发送到服务器的 HTTP 请求头部信息中[^4]。 --- ### 在 Vue.js 中 `responseType: 'blob'` 的作用 1. **控制响应数据格式** 设置 `responseType: 'blob'` 可以确保前端正确接收并处理二进制数据流。当后端返回的是压缩包、图片、PDF 等非文本格式数据时,必须通过此配置将响应解析为 `Blob` 对象,以便后续创建下载链接或进行文件操作[^3]。 2. **支持文件下载功能** 在实现文件下载功能时,通常需要将响应数据转换为 `Blob`,然后结合 `URL.createObjectURL()` 创建临时链接,触发浏览器下载行为。这种机制可以有效避免因响应类型错误而导致的下载失败问题。 3. **兼容性处理异常响应** 当使用 `responseType: 'blob'` 时,如果后端返回的是 JSON 错误信息而非预期的二进制数据,前端无法直接访问错误内容。此时可通过 `FileReader` 解析 `Blob` 数据,读取其中的文本内容(如错误提示),从而实现友好的错误提示功能[^3]。 --- ### 实际应用场景示例 以下是一个在 Vue.js 中结合 Axios 使用 `responseType: 'blob'` 的典型示例,用于下载文件并处理可能的错误响应: ```javascript import axios from 'axios'; import { ElMessage } from 'element-plus'; export function downloadFile(fileId) { return axios.get(`/api/files/${fileId}`, { responseType: 'blob' }).then(response => { const contentType = response.headers['content-type']; if (contentType === 'application/json;charset=UTF-8') { const reader = new FileReader(); reader.onload = () => { const errorData = JSON.parse(reader.result); ElMessage.error(errorData.message || '下载失败'); }; reader.readAsText(new Blob([response.data], { type: 'application/json' })); return; } const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'example.zip'); document.body.appendChild(link); link.click(); link.remove(); }).catch(error => { ElMessage.error('网络错误,请重试'); }); } ``` 上述代码中,首先检查响应的 `Content-Type`,若为 JSON 则说明是错误信息,需通过 `FileReader` 解析;否则正常创建下载链接并触发下载动作。 --- ### 总结 `responseType: 'blob'` 是一种客户端配置选项,用于指定如何解析 HTTP 响应数据,并不作为请求头发送至服务器。其主要作用在于确保前端能够正确处理二进制流数据,特别是在文件下载、多媒体展示和错误信息提取等场景中具有重要意义[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值