mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-22 17:47:11 +00:00
Cloud storage
This commit is contained in:
parent
401940b717
commit
cecdabc0d9
2 changed files with 65 additions and 19 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
24
handler/cloud-storage/storage_test.go
Normal file
24
handler/cloud-storage/storage_test.go
Normal 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")
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue