REST上传到没有Content-Length的Skydrive

时间:2013-05-15 14:37:40

标签: rest onedrive

我正在尝试将文件上传到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会导致上面的原始错误。

1 个答案:

答案 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);
    });
});

@Resource