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

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

https://developers.google.com/drive/web/manage-uploads#multipart

以下是请求正文的简化示例。

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

*metadata Json object*

--delim
Content-Type: *datatype*

*data*
--delim--

我的问题是:

  • 我正在使用JavaScript
  • 我必须将数据作为Blob发送
  • 我无法使用Google的JavaScript API
  • 它必须与Internet Explorer(至少9)兼容。

如您所见,该请求由两个字符串组成,中间有一个BLOB。
但是,如果我进行"a-"+BLOB+"-b"这样的连接,我当然会得到字符串"a-[Object Blob]-b"

那么,我如何发送包含Blob和元数据的请求?

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


解决方案

我找到了答案, 我不得不用Base64编码我的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, 为了简洁起见,我在这里做了简化。

相关文章