1

Content-Length をアプリオリに知らない 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 は 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 を設定すると、上記の元のエラーが発生します。

4

1 に答える 1

0

ダミーcontent-lengthを設定して、許容できるかどうかを確認してください。それ以外の場合は、ファイル サイズを設定します。
使用している場合はnode.js、アップロードしようとしているファイル サイズを取得しcontent-length、OCTET でサイズを設定できます。requiringノードのfs(ファイルシステム)モジュールのファイルサイズを取得できます。

var fs = require('fs');
fs.watchFile('some.file', function () {
    fs.stat('some.file', function (err, stats) {
        console.log(stats.size);
    });
});

@リソース

于 2013-05-15T15:15:17.237 に答える