LoginSignup
3
0

More than 1 year has passed since last update.

Google Cloud StorageのSigned URLでアップするときのCORS設定

Posted at

主に自分用ですが、たぶん1年後忘れてそうなのでメモすることにしました

GCSでSignedUrlを発行してクライアント側でアップしたい

よくあるケースですよね。とりあえずSignedUrlを発行するところは、以下のドキュメントを見て簡単にできました。

そうして出来上がったURLをDropzone.jsに食わせてアップロードしようと思ったのですが、CORSエラーに引っかかりました。
こちらの記事なども参考にしたのですが、そのままではアップロードできませんでした。

最終的に成功したCORS設定

[
    {
      "origin": ["https://example.com"],
      "responseHeader": ["content-type", "cache-control","x-requested-with"],
      "method": ["PUT"],
      "maxAgeSeconds": 3600
    }
]

今回クライアントサイドからはPUTしかしないので、GETなどは入れていませんがお好みで追加してください。当初Content-typeのみをresponseHeaderにセットしていたのですが、それだとだめでした。

Preflightリクエストのリクエストヘッダを見てみると、以下のheaderを要求していたので、追加しました。

2021-10-09cors

それだけだとダメだった

それだけだとなぜかCORSエラーが出て頭を抱えていたのですが、githubのissueなどを参考に、明示的にContent-typeをセットするといけたとありました。

# Dropzoneのoptionに追加
そのほかのオプション,
sending: function(file, xhr) {
  var _send = xhr.send;
  xhr.setRequestHeader("Content-type","application/octet-stream");
  xhr.send = function() { // そもそもGCSにアップするときのハック
    send.call(xhr, file);
  }
}, 

どうも、CORSエラーじゃないエラーでもCORSのエラーとしてブラウザに出てきてしまうみたいです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0