如何使用Golang在Google云端存储桶上启用存储桶版本控制?

时间:2016-09-26 06:13:19

标签: go google-cloud-storage

我正在开发一个项目,我需要使用Golang在Google云端存储上启用存储桶版本控制。更具体一点:

  1. 如何在已创建的存储桶上启用版本控制?
  2. 如何在新存储桶上启用版本控制?
  3. 注意:我已经用Google搜索并浏览了Google Cloud Platform的文档,并找到了仅使用Java进行版本控制的代码示例。我甚至已经探索过这个软件包" cloud.google.com/go/storage"了解代码但没有帮助。

    我在我的代码中使用下面的库和函数来更新存储桶:

        import "cloud.google.com/go/storage"
    
        func configureStorage(bucketID string) (*storage.BucketHandle, error) {
            ctx := context.Background()
            client, err := storage.NewClient(ctx)
            if err != nil {
                log.Printf("An error happened: %v", err)
                return nil, err
            }
            return client.Bucket(bucketID), nil
        }
    
        func saveFileToStorage(bucketID string, fileName string, contentType string, file multipart.File) {
            StorageBucket, err := configureStorage(bucketID)
    
            if err != nil {
                log.Fatal(err)
            }
    
            if StorageBucket == nil {
                log.Printf("Storage Bucket is nil")
                return
            }
    
            ctx := context.Background()
    
            wr := StorageBucket.Object(fileName).NewWriter(ctx)
            wr.ACL = []storage.ACLRule{{Entity: storage.AllUsers, Role: storage.RoleReader}}
            wr.ContentType = contentType
    
            // Entries are immutable, be aggressive about caching (1 day).
            wr.CacheControl = "public, max-age=86400"
    
            if _, err := io.Copy(wr, file); err != nil {
                log.Fatal(err)
            }
            if err := wr.Close(); err != nil {
                log.Fatal(err)
            }
        }
    

2 个答案:

答案 0 :(得分:0)

您可以尝试通过GET得知是否启用了版本控制。

gsutil versioning get gs://bucket_name

可以在存储桶的版本控制中尝试使用此SET。

gsutil versioning set on gs://bucket_name

答案 1 :(得分:0)

这似乎可行:

client.Bucket("bucket").Update(ctx, storage.BucketAttrsToUpdate{VersioningEnabled: true})