我正在尝试将文件上传到Skydrive,我不知道Content-Length。使用其他存储服务,我可以使用分块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提供了Chunked Upload命令:https://www.dropbox.com/developers/core/docs#chunked-upload
Google云端硬盘虽然表示需要Content-Length,但它不需要它的可恢复上传API:https://developers.google.com/drive/manage-uploads#resumable
我缺少一个API吗?
编辑:我尝试过的事情:设置Content-Length:0会导致它工作,但文件是零字节。设置Content-length:0和Transfer-Encoding:chunked会导致上面的原始错误。
答案 0 :(得分:0)
尝试设置虚拟content-length
以查看它是否可接受。否则设置文件大小
如果您使用node.js
,则可以获取要上传的文件大小,并在OCTET中将大小设置为content-length
。您可以在节点中获取文件大小requiring
fs
(文件系统)模块。
var fs = require('fs');
fs.watchFile('some.file', function () {
fs.stat('some.file', function (err, stats) {
console.log(stats.size);
});
});