##アップロード
func upload(ctx context.Context, body []byte, storagePath string) (urlString string, err error) {
bucketname, err := file.DefaultBucketName(ctx)
if err != nil { return }
client, err := storage.NewClient(ctx)
if err != nil { return }
writer := client.Bucket(bucketname).Object(storagePath).NewWriter(ctx)
writer.ContentType = "image/jpeg"
defer writer.Close()
_, err = writer.Write(body)
if err != nil {
return
}
urlString = "https://storage.googleapis.com/" + bucketname + "/" + storagePath
return
}
bodyはioutil.ReadAll
とかで取り出したbyte列
storagePathは"images/128082/1233.jpg"とか、/から始めないこと
##権限変更
このままだとアップロードしても
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous users does not have storage.objects.get access to object file.
</Details>
</Error>
と言われるので、権限を変更する。
権限はバケット毎に変更する。ディレクトリ自体単位では変更出来ない。
https://console.cloud.google.com/storage/browser?project=#{project id}
からバケットを選んで、左側の・・・からオブジェクトのデフォルトの権限を編集
ユーザー:allUsers:読み取り
と設定する。最初allUsers
をどうやって指定するのかわからなかったけど普通にallUsersって入れておけばOK