Google Cloud StorageのSigned URLでアップするときのCORS設定
主に自分用ですが、たぶん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
}
]
[
{
"origin": ["https://example.com"],
"responseHeader": ["content-type", "cache-control","x-requested-with"],
"method": ["PUT"],
"maxAgeSeconds": 3600
}
]
今回クライアントサイドからはPUTしかしないので、GETなどは入れていませんがお好みで追加してください。当初Content-typeのみをresponseHeaderにセットしていたのですが、それだとだめでした。
Preflightリクエストのリクエストヘッダを見てみると、以下のheaderを要求していたので、追加しました。
それだけだとダメだった
それだけだとなぜか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のエラーとしてブラウザに出てきてしまうみたいです。
Author And Source
この問題について(Google Cloud StorageのSigned URLでアップするときのCORS設定), 我々は、より多くの情報をここで見つけました https://qiita.com/ku_suke/items/365f81d71dd7065b83ed著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .