Javascript 如何发送包含Blob的http多部分POST请求?

Javascript 如何发送包含Blob的http多部分POST请求?,javascript,google-drive-api,internet-explorer-9,blob,mxhr,Javascript,Google Drive Api,Internet Explorer 9,Blob,Mxhr,我使用多部分XMLHttpRequest在Google驱动器帐户上上传文件,使用Google文档中描述的语法: 下面是请求主体的一个简化示例 --delim Content-Type: application/json; charset=UTF-8 *metadata Json object* --delim Content-Type: *datatype* *data* --delim-- 我的问题是: 我正在使用JavaScript 我必须以Blob的形式发送数据 我不能使用谷歌

我使用多部分XMLHttpRequest在Google驱动器帐户上上传文件,使用Google文档中描述的语法:

下面是请求主体的一个简化示例

--delim
Content-Type: application/json; charset=UTF-8

*metadata Json object*

--delim
Content-Type: *datatype*

*data*
--delim--
我的问题是:

  • 我正在使用JavaScript
  • 我必须以Blob的形式发送数据
  • 我不能使用谷歌的JavaScript API
  • 它必须与Internet Explorer兼容(至少9个)
如您所见,请求由两个字符串组成,中间有一个blob。
但是,如果我进行像“a-”+blob+“-b”这样的连接,我当然会得到字符串“a-[objectblob]-b”

那么,如何发送包含blob和元数据的请求呢

注:我知道我可以单独发送数据,然后编辑元数据, 但是它需要两个请求,
一个请求太多。

该对象工作得很好,但与IE<10不兼容

对于IE 9及以下版本,需要一个不同的解决方案s的首要答案建议将其用作与IE较低版本兼容的替代方案

进一步检查后,该插件似乎模拟了所有不兼容浏览器的FormData对象。可以找到独立的解决方案。

我找到了答案, 我必须用64进制编码我的Blob的内容:

var reader = new FileReader
reader.readAsDataURL(blob)
var data = reader.result;
//don't need type informations
data = data.split(",").pop();
在请求的第二部分中的“Content Type”值之后, 我加了一行:

'Content-Transfer-Encoding: base64'
现在它工作了

别担心,在我的代码中,我以异步方式使用了FileReader,
为了简洁起见,我在这里进行了简化。

您是否尝试发送包含blob的FormData对象?哦,我忘了说它需要在IE 9上工作,对不起。。。