我正在尝试将文件上传到我不知道内容长度的 Skydrive。使用其他存储服务,我可以通过分块 HTTP 上传来做到这一点,但 Skydrive 总是抱怨 Content-Length 无效。
以下是我发送的完整标题:
PUT /v5.0/me/skydrive/files/skydrive_test.js?overwrite=ChooseNewName HTTP/1.1
Authorization: Bearer <TOKEN_REDACTED>
host: apis.live.net
content-type: application/javascript
Connection: keep-alive
Transfer-Encoding: chunked
这是我得到的回复:
cache-control: private, no-cache, no-store, must-revalidate
transfer-encoding: chunked
content-type: application/json; charset=UTF-8
server: Live-API/16.4.1731.327 Microsoft-HTTPAPI/2.0
x-content-type-options: nosniff
x-http-live-request-id: API.c6afda25-2d9f-4248-9f49-001ccb3a9007
x-http-live-server: BAYMSG1010836
date: Wed, 15 May 2013 14:33:00 GMT
{ "error": { "code": "request_invalid_content_length",
"message": "The value for the Content-Length header isn't valid." }}
有什么方法可以在不设置 Content-Length 的情况下做到这一点(即使用分块编码)?
我正在使用 node.js 来执行此操作,但它应该同样适用于使用 REST API 的任何语言,因此我没有用特定语言标记它。
例如 Dropbox 提供分块上传命令:https ://www.dropbox.com/developers/core/docs#chunked-upload
而 Google Drive,即使它说它需要 Content-Length,也不需要它,因为它的可恢复上传 API:https ://developers.google.com/drive/manage-uploads#resumable
有没有我缺少的 API?
编辑:我尝试过的事情:设置 Content-Length: 0 会导致它工作,但文件是零字节。设置 Content-length:0 和 Transfer-Encoding: chunked,会导致上面的原始错误。