Cloud Storageの公式ドキュメントに基づいて、バイナリファイルを取得していきたいと思います。
※Goリファレンスのサンプルコードを使用します
※Cloud Storageにはすでに画像が入っている状態とします(今回はhoge.txtとfuga.pdfを入れてあります)
サービスアカウントの入手
GCP:サービス アカウントとして認証するの手順にしたがって、まずはサービスアカウントのJSONファイルを取得します。
コードを記述して取得する方法もありますが、初心者は「サービス アカウント キーの作成」からGCPのコンソールで取得をおすすめします!
JSONファイルが取得できたらokです。
準備
JSONファイルが取得できたら、いよいよGoでのコーディングです。
この時、環境変数GOOGLE_APPLICATION_CREDENTIALS
に取得したjsonのパスが入ってないと失敗します。
環境変数に設定できていない人は、以下の通り、exportコマンドで環境変数に設定してください。
※このコマンドは、環境変数にJSONまでのパスを登録しています。
ファイルの一覧を取得する方法
package main
import (
"cloud.google.com/go/storage"
"context"
"fmt"
"google.golang.org/api/iterator"
"log"
)
func main() {
// clientを作成します
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
log.Fatal(err)
}
// bucketを作成します
bkt := client.Bucket("bucket名を入れます")
// 絞って検索したい人はqueryを設定します
query := &storage.Query{Prefix: ""}
// Storageに登録されているファイルの一覧を取得します
var names []string
it := bkt.Objects(ctx, query)
for {
attrs, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
names = append(names, attrs.Name)
}
fmt.Println(names)
}
// [hoge.txt fuga.pdf]
txtファイルの中身を取得する方法
// hoge.txtの中身
これはテストです
package main
import (
"cloud.google.com/go/storage"
"context"
"fmt"
"io/ioutil"
"log"
)
func main() {
// clientを作成します
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
log.Fatal(err)
}
// バケットからtxtファイルを取得
rc, err := client.Bucket("test0308").Object("hoge.txt").NewReader(ctx)
if err != nil {
log.Fatal(err)
}
// 取得したファイルのファイル形式(拡張子)とバイナリを取得
et := rc.Attrs.ContentType
bi, err := ioutil.ReadAll(rc)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%v\n", et) // text/plain
fmt.Printf("%v\n", string(bi)) // これはテストです
}
さいごに
いかがでしたでしょうか。
cloud storageの使い方に迷っている人の手助けになればと思います。
やれることはまだまだたくさんありますので、Goリファレンスから探してみるといいと思います。