请求出现“Content type ‘application/octet-stream‘not supported“错误

一、场景

记一个接口调试问题,前端传参包括文件+json字符串,请求头

'Content-Type': 'multipart/form-data',

请求参数

params = {
  addVo: JSON.stringify({xxx: xxx}),
  multipartFile: this.files
}

参数处理formdata:

console.log(params);
let data = new FormData();
Object.keys(params).forEach(key => {
  if (Array.isArray(params[key])) {
    params[key].forEach(item => {
      data.append(key, item.raw);
    });
  } else {
    data.append(key, params[key]);
  }
});

二、错误描述

错误描述:
Content type 'application/octet-stream‘not supported,即内容类型’application/octet-stream '不支持。由此可见,我们这里传的参数需要’application/octet-stream’类型支持。
octet-stream:任意二进制流数据。
application/octet-stream:只能提交二进制或文件。

三、解决办法

由错误描述可知,我们这里不能传一个json字符串,而是一个二进制,这时需要使用 Blob() 构造函数将 json 字符串转化为 Blob 对象(Blob 对象表示一个不可变、原始数据的类文件对象,它的数据可以按文本或二进制的格式进行读取)放到 formData 中,如下:

json = JSON.stringify({
  xxx: xxx
}); console.log('json', JSON.parse(json)); // 将 json 字符串转化为 Blob 对象 blob = new Blob([json], {   type: 'application/json', }); params = {   addVo: blob,   multipartFile: this.files }

说明:type: ‘application/json’ 表示将会被放入到 blob 中的数组内容的类型是 json 字符串。

 

posted @ 2025-04-16 16:58  盼星星盼太阳  阅读(2726)  评论(0)    收藏  举报