Cloud storage

This commit is contained in:
giongto35 2019-05-04 03:32:17 +08:00
parent 8a476c7d35
commit 681733ac75
2 changed files with 65 additions and 19 deletions

View file

@ -2,54 +2,76 @@ package storage
import (
"context"
"fmt"
"io"
"io/ioutil"
"log"
"os"
"cloud.google.com/go/storage"
)
type Client struct {
bucket string
gclient storage.Client
bucket *storage.BucketHandle
gclient *storage.Client
}
func NewClient() *Client {
func NewInitClient() *Client {
projectID := os.Getenv("GCP_PROJECT")
bucketName := "game-save"
return NewClient(projectID, bucketName)
}
// NewClient inits a new Client accessing to GCP
func NewClient(projectID string, bucketName string) *Client {
ctx := context.Background()
// Sets your Google Cloud Platform project ID.
projectID := "YOUR_PROJECT_ID"
// Creates a client.
client, err := storage.NewClient(ctx)
gclient, err := storage.NewClient(ctx)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Sets the name for the new bucket.
bucketName := "my-new-bucket"
// Creates a Bucket instance.
bucket := client.Bucket(bucketName)
bucket := gclient.Bucket(bucketName)
// Creates the new bucket.
if err := bucket.Create(ctx, projectID, nil); err != nil {
log.Fatalf("Failed to create bucket: %v", err)
return &Client{
bucket: bucket,
gclient: gclient,
}
fmt.Printf("Bucket %v created.\n", bucketName)
}
func (c *Client) SaveFile(name string, data string) (err error) {
wc := c.gclient.Bucket(c.bucket).Object(name).NewWriter(nil)
if _, err = io.Copy(wc, f); err != nil {
// Savefile save srcFile to GCP
func (c *Client) SaveFile(name string, srcFile string) (err error) {
reader, err := os.Open(srcFile)
if err != nil {
return err
}
// Copy source file to GCP
wc := c.bucket.Object(name).NewWriter(context.Background())
if _, err = io.Copy(wc, reader); err != nil {
return err
}
if err := wc.Close(); err != nil {
return err
}
return nil
}
func (h *Helper) LoadFile(name string) []byte {
// Loadfile load file from GCP
func (c *Client) LoadFile(name string) (data []byte, err error) {
rc, err := c.bucket.Object(name).NewReader(context.Background())
if err != nil {
return nil, err
}
defer rc.Close()
data, err = ioutil.ReadAll(rc)
if err != nil {
return nil, err
}
return data, nil
}

View file

@ -0,0 +1,24 @@
package storage
import (
"io/ioutil"
"log"
"testing"
)
func TestSaveGame(t *testing.T) {
client := NewInitClient()
data := []byte("Test Hello")
ioutil.WriteFile("/tmp/TempFile", data, 0644)
err := client.SaveFile("Test", "/tmp/TempFile")
if err != nil {
log.Panic(err)
}
loadData, err := client.LoadFile("Test")
if err != nil {
log.Panic(err)
}
if string(data) != string(loadData) {
log.Panic("Failed")
}
}