LoginSignup
1
0

More than 3 years have passed since last update.

Goの様々な知見

Last updated at Posted at 2019-11-10

自分が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}}
1
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
1
0