Autodesk の Forge Object Storage Service を使用しています。ファイルをバケットにアップロードできますが、ダウンロードしようとすると、本文が空になります。ただし、 を使用するHead
場合、Data-Size は正しいです。
これが私のアップロードです(署名付きURLアップロードAPIを使用していることに注意してください):
var url = uploadOptions.url;
var fileReader = new FileReader();
// UploadOptions.Body contains a Blob
fileReader.readAsBinaryString(uploadOptions.Body);
fileReader.onloadend = function (e) {
var xhr = new XMLHttpRequest();
var lastLoadedValue = 0;
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 201)) {
console.log('UPLOAD FINISHED:', xhr.responseText);
callback();
}
};
xhr.open("PUT", url, true);
xhr.withCredentials = true;
// uploadOptions.ContentType = 'application/octet-stream'
xhr.setRequestHeader('Content-Type', uploadOptions.ContentType);
xhr.send(e.target.result);
ここに私のダウンロードがあります:
スーパーエージェント .get(_autodesk_api_baseurl + baseUrl + downloadOptions.bucket + '/オブジェクト/' + encodeURIComponent(downloadOptions.key)) .set('認証', 'ベアラー' + token.access_token) .query({'応答コンテンツ タイプ': 'アプリケーション/オクテット ストリーム'}) .end(関数 (エラー、応答) { if (typeof callback === '関数') { // すべて正常に動作します コールバック(未定義、応答); } });
そして、コールバックで応答を出力すると、本文は空になります。これを取得するために、JSON エンコードされた応答をファイルに書きました。
{
"req": {
"method": "GET",
"url": "https://developer.api.autodesk.com/oss/v2/buckets/storage.vcs.prod.mevsg.autodesk.com/objects/assets%2FNT5NR9KJU2PH%2Fea02ec77505f2ea2defac93fe231764f2916e4d1aeaac7d92945a08a0086c60667369431361d5aa426d4cccca49b9e4c7cb70bc6ebf700258a3cb37617eacfa0"
},
"header": {
"access-control-allow-credentials": "true",
"access-control-allow-headers": "Authorization, Accept-Encoding, Range, Content-Type",
"access-control-allow-methods": "GET",
"access-control-allow-origin": "*",
"content-disposition": "attachment; filename=\"ea02ec77505f2ea2defac93fe231764f2916e4d1aeaac7d92945a08a0086c60667369431361d5aa426d4cccca49b9e4c7cb70bc6ebf700258a3cb37617eacfa0\"",
"content-encoding": "gzip",
"content-type": "application/octet-stream",
"date": "Thu, 30 Jun 2016 18:03:10 GMT",
"etag": "\"8ad9c59b256cef48798a94c0295023088016d43a\"",
"server": "Apigee Router",
"vary": "Accept-Encoding",
"transfer-encoding": "chunked",
"connection": "Close"
},
"status": 200
}
ご覧のとおり、本体はありません。しかしHead
、オブジェクトで使用すると、適切なバイト数が得られます。
誰かが私が間違っていることを教えてもらえますか? Content-Type をハードコーディングしてみapplication/x-www-form-urlencoded
たら、ファイルをダウンロードできましたが (本文にバイトがありました)、バイトが少し変更されました。たとえば、208 (11010000) は 80 (1010000) になりました。ご覧のとおり、最初のビットが反転しています。そのコンテンツ タイプでは、ファイルを開くことができませんでした。どの方法を使用すればよいですか?
更新: Augusto の助けを借りて、問題を発見しました。
- Superagent は機能しないようですが、Request は機能します。
- 実際に影響があったかどうかはわかりませんが、ダウンロードしたバッファのエンコーディングをbase64に設定しました
- Blob を直接アップロードする必要がありました。バイトを読み取るために FileReader を使用する必要はありませんでした。