2016-10-16 3 views
5

実際のテストケースコードから直接アップロード用のNode.jsとGoogleのクラウドストレージのために署名したURLを作成します。私は私のAPIは、Googleクラウドに直接アップロードするための署名のURLを返送するための機能を追加しようとしているhttps://github.com/HenrikJoreteg/google-cloud-signedurl-test-caseブラウザ

をクライアントからのストレージ。

サーバーサイド、私はこのためにgcloud SDKを使用しています:

const gcloud = require('gcloud') 

const gcs = gcloud.storage({ 
    projectId: 'my project', 
    keyFilename: __dirname + '/path/to/JSON/file.json' 
}) 
const bucket = gcs.bucket('bucket-name') 

bucket.file('IMG_2540.png').getSignedUrl({ 
action: 'write', 
expires: Date.now() + 60000 
}, (error, signedUrl) => { 
    if (error == null) { 
    console.log(signedUrl) 
    } 
}) 

は、その後、私は私が使用してファイルを選択した<input type='file'/>を持っているブラウザで、私はそれを投稿しようとしサーバー側のスクリプトから生成されるURL:

function upload(blobOrFile, url) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('PUT', url, true); 
    xhr.onload = function(e) { 
    console.log('DONE!') 
    }; 
    xhr.upload.onprogress = function(e) { 
    if (e.lengthComputable) { 
     console.log((e.loaded/e.total) * 100) 
    } 
    }; 

    xhr.send(blobOrFile); 
} 

// grab the `File` object dropped (which incidentally 
// matches the file name used when generating the signed URL 
upload($('[name=file]').files[0], 'URL GENERATED FROM SERVER-SIDE SCRIPT HERE'); 

どうしますか?私は、JSONのキーファイルは、それが現在だとそのバケットに適切な権限を持っていることを確認するために再ダウンロードした

<Error> 
    <Code>SignatureDoesNotMatch</Code> 
    <Message>The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.</Message> 
<StringToSign>PUT 

image/png 
1476631908 
/bucket-name/IMG_2540.png</StringToSign> 
</Error> 

と署名を生成するときに、私はすべてのエラーか何かを得ることはありません:

レスポンスですURL。

クライアント側のコードが適切にアップロードを開始しているようです(進捗状況の更新がログアウトされているのがわかります)。上記の403エラーが表示されます。ファイル名が一致し、コンテンツタイプが期待値と一致するように見えます。有効期限は合理的です。

公式のSDKがURLを生成していたので、大丈夫そうです。

私は立ち往生しています。

+0

私はあなたがコンテンツタイプは予想と一致しているように見えると言う知っています。それでも、確認するには、ブラウザから送信されたヘッダーを見るとcontent-type:image/pngですか? XHRはsetRequestHeader()を必要とせずにこれを行いますか? – glenschler

+0

ありがとう@glenschlerですが、XHRはバージョン2のようにこれを行います。ヘッダーは次のとおりです。https://cloudup.com/cWxNOTCs_EZ –

+0

が、孤立したケースのレポを含むように更新されました:https://github.com/HenrikJoreteg/google-cloud-signedurl-test-case –

答えて

2

このケースを含む私のgithubリポジトリのPhilip Roberts氏(@LatentFlip)が指摘したように、シグネチャにコンテンツタイプを追加すると、それが処理されました。

https://github.com/HenrikJoreteg/google-cloud-signedurl-test-case/pull/1/commits/84290918e7b82dd8c1f22ffcd2c7cdc06b08d334

また、それは、Googleの人々がもう少し有用であることをドキュメント/エラーを更新しようとしているように聞こえる:https://github.com/GoogleCloudPlatform/google-cloud-node/issues/1695

+0

ねえ、同じ問題。私はあなたのレポをクローンし、それは動作しません。これで私を助けることができますか? –