自分がGoぶつかった課題の解答をまとめます
#1ファイルをGCSに上げるときにぶつかった
//リクエストのファイル取得
file, handler, err := this.Ctx.Request.FormFile("file")
//コンテキスト作成
ctx := context.Background()
//トークン使ってクライアント作成
client, err := storage.NewClient(ctx, option.WithCredentialsFile("/go/src/keipass-api/conf/xxx.json"))
//バケットと名前指定して
writer := client.Bucket("xxx").Object("xxx.png").NewWriter(ctx)
//保存
writer.Write(file) <-ファイルがバイナリじゃないって怒られる
multipart.Fileはio.Readerインターフェースを実装しているため、次のようにそのコンテンツをbytes.Bufferにコピーする。
file, header, err := ctx.Request.FormFile("file")
defer file.Close()
if err != nil {
return nil, err
}
buf := bytes.NewBuffer(nil)
if _, err := io.Copy(buf, file); err != nil {
return nil, err
}
#2 Google Storageの権限付与
client, err := storage.NewClient(ctx)
writer := client.Bucket("xxx").Object("xxx.png").NewWriter(ctx)
//ACLに権限情報を埋め込む
writer.ACL = []storage.ACLRule{{Entity: storage.AllUsers, Role: storage.RoleReader}}