2

Go APIから返されたSignedURLをCORSで使用するにはどうすればよいですか?CORS with SignedURL

CURRENT SETUP:

バケツ設定

gsutil cors get gs://example-bucket

リターン:

[{ 
    "maxAgeSeconds": 1, 
    "method": ["GET", "HEAD", "PUT", "DELETE", "POST", "OPTIONS"], 
    "origin": ["http://example.com", "https://example.com", "http://localhost:4000"], 
    "responseHeader": ["Origin", "Accept", "X-Requested-With", "Authorization", "Content-Type", "Content-Length", "Accept-Encoding", "X-CSRF-Token" 
]}] 

のGo API呼び出し

acc, _ := appengine.ServiceAccount(ctx) 

signedUrl, err := storage.SignedURL(
     "example-bucket", 
     fileName, 
     &storage.SignedURLOptions{ 
      GoogleAccessID: acc, 
      SignBytes: func(b []byte) ([]byte, error) { 
       _, signedBytes, signingError := appengine.SignBytes(ctx, b) 
       return signedBytes, signingError 
      }, 
      Method:  "PUT", 
      ContentType: contentType, 
      Expires:  time.Now().Add(1 * time.Hour), 
     }) 

JS XHR

SignedURLが囲碁APIによって生成される、すなわちxhr.open("PUT", signedUrl);

EXTRA NOTESは、常に他の場所で... https://storage.googleapis.com/example-bucket/fileNameで始まり、移動からSignedURLを使用します私はそれがwww.googleapis.com/storageであるべきであることを読んだが、私はこれが問題であるとは思わない、確かに公式APIから返されたURLは共同起立。

私はリクエストヘッダが含まれていることを見ることができます:

  • access-control-request-headers: content-type,x-upload-content-type
  • access-control-request-method: PUT
  • origin: http://localhost:4000

をだから、それが必要なヘッダーのすべてのボックスをオフに刻むようです...

答えて

3

JS側では、addファイルの画像メタデータはX-Upload-Content-Typeヘッダーを介してアップロードされます。

このヘッダーはCORS設定に含まれていないため、要求は失敗していました。

設定(gsutil cors set configファイルに供給例えばresponseHeaderリスト)にそのヘッダを付加し、すべてが問題に記載のとおりに動作している:)

関連する問題