3

ファイルをアップロードするために axios を使用して Google クラウド ストレージ バケットにアクセスしようとしています。

バケットの CORS ポリシーを次のように設定しました。

[
    {
      "origin": ["http://localhost:8000", "localhost"],
      "responseHeader": ["Access-Control-Allow-Origin", "Content-Type"],
      "method": ["GET", "HEAD", "DELETE", "PUT", "POST"],
      "maxAgeSeconds": 3600
    }
]

次に、次の gsutil コマンドを使用して署名付き URL を生成します。

gsutil signurl -m RESUMABLE -d 1h my-key.json gs://test-bucket/

最後に、この axios POST リクエストを送信します。

var startLink = "signed url from gsutil"
var data = {
  'Content-Length': 0,
  'Content-Type': 'text/plain',
  'x-goog-resumable': 'start',
  host: 'test-django-bucket.storage.googleapis.com',
};

axios.post(startLink, data)
  .then(function(response) {
    console.log(respone);
  });

私が得るこの結果は次のとおりです。

<?xml version='1.0'
encoding='UTF-8'?><Error><Code>InvalidPolicyDocument</Code><Message>The content of the form does not meet the conditions specified in the
policy document.</Message><Details>Missing policy</Details></Error>

ここで私は正確に何を間違えましたか?ここにある指示に従っています。


更新: 以下の @BrandonYarbrough から、数回後にすべてを機能させるために修正しなければならなかったことに関するいくつかのメモ:

最初に axios リクエストが間違っていました。次のようになります。

var data = {
  headers: {
    'content-type': 'text/plain',
    'x-goog-resumable': 'start',
  }
};
axios.post(startLink, {}, data)
  .then(function(response) {
    console.log(response);
  });

次に、以下で説明するように gstuil コマンドを更新する必要がありました。

gsutil signurl -m RESUMABLE -d 10h -c "text/plain" mykey.json gs://test-bucket
4

1 に答える 1

2

署名に追加する 2 つの情報を gsutil に与える必要があります。 Content-Type と、作成するオブジェクトの名前です。このコマンドを試してください:

gsutil signurl -m RESUMABLE -d 1h -c "text/plain" my-key.json gs://test-bucket/object-name.txt

また、gsutil はおそらく「storage.googleapis.com/test-django-bucket/your_object?lotsOfUrlParameters」のような URL を出力します。「test-django-bucket.storage.googleapis.com」のホスト ヘッダーを指定してその URL に移動すると、実際には「test-django-bucket/your_object」というオブジェクトが「test-django-bucket」というバケット。ホスト ヘッダーを削除して直接 storage.googleapis.com にアクセスするか、gsutil によって返された URL を編集して「test-django-bucket」ビットを削除します。

さらに、ヘッダーをデータとして送信していると思います。axios ヘッダーは、「ヘッダー」構成セクションを使用して設定されていると思います。

于 2016-06-23T19:01:13.553 に答える