LoginSignup
0
0

More than 3 years have passed since last update.

【Go言語(golang)】GCPのCloud Storageからファイルを取得する方法

Posted at

Cloud Storageの公式ドキュメントに基づいて、バイナリファイルを取得していきたいと思います。

Goリファレンスのサンプルコードを使用します
※Cloud Storageにはすでに画像が入っている状態とします(今回はhoge.txtとfuga.pdfを入れてあります)

サービスアカウントの入手

GCP:サービス アカウントとして認証するの手順にしたがって、まずはサービスアカウントのJSONファイルを取得します。
コードを記述して取得する方法もありますが、初心者は「サービス アカウント キーの作成」からGCPのコンソールで取得をおすすめします!
service.png
JSONファイルが取得できたらokです。

準備

JSONファイルが取得できたら、いよいよGoでのコーディングです。
この時、環境変数GOOGLE_APPLICATION_CREDENTIALSに取得したjsonのパスが入ってないと失敗します。
環境変数に設定できていない人は、以下の通り、exportコマンドで環境変数に設定してください。
※このコマンドは、環境変数にJSONまでのパスを登録しています。
hoge.png

ファイルの一覧を取得する方法

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リファレンスから探してみるといいと思います。

0
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
0
0