Go 如何以编程方式将图像上载为公共?
如何将谷歌云存储中的图像自动上传为公共图像 我试过这个 代码: 发生什么事了 我想要什么第一排 第二排我得到了什么 结果:Go 如何以编程方式将图像上载为公共?,go,google-cloud-platform,google-cloud-storage,Go,Google Cloud Platform,Google Cloud Storage,如何将谷歌云存储中的图像自动上传为公共图像 我试过这个 代码: 发生什么事了 我想要什么第一排 第二排我得到了什么 结果: 在我的代码中,什么对我有效,分离上传文件并设置访问权限操作。它看起来像这样: sw := storageClient.Bucket(bucket).Object(uploadedFile.Filename).NewWriter(ctx) sw.CacheControl = "public, max-age=86400" if _, err := io
在我的代码中,什么对我有效,分离上传文件并设置访问权限操作。它看起来像这样:
sw := storageClient.Bucket(bucket).Object(uploadedFile.Filename).NewWriter(ctx)
sw.CacheControl = "public, max-age=86400"
if _, err := io.Copy(sw, f); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"message": err.Error(),
"error": true,
})
return
}
if err := sw.Close(); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"message": err.Error(),
"error": true,
})
return
}
//set public access
acl := storageClient.Bucket(bucket).Object(uploadedFile.Filename).ACL()
if err := acl.Set(ctx, storage.AllUsers, storage.RoleReader); err != nil {
//handle error
}
在我的代码中,什么对我有效,分离上传文件并设置访问权限操作。它看起来像这样:
sw := storageClient.Bucket(bucket).Object(uploadedFile.Filename).NewWriter(ctx)
sw.CacheControl = "public, max-age=86400"
if _, err := io.Copy(sw, f); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"message": err.Error(),
"error": true,
})
return
}
if err := sw.Close(); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"message": err.Error(),
"error": true,
})
return
}
//set public access
acl := storageClient.Bucket(bucket).Object(uploadedFile.Filename).ACL()
if err := acl.Set(ctx, storage.AllUsers, storage.RoleReader); err != nil {
//handle error
}
您应该在将对象上载到bucket后将其设置为公共对象。正如您所看到的,您可以使用下面的代码将它们公开
func makePublic(w io.Writer, bucket, object string, entity storage.ACLEntity, role storage.ACLRole) error {
// bucket := "bucket-name"
// object := "object-name"
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
return fmt.Errorf("storage.NewClient: %v", err)
}
defer client.Close()
ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
acl := client.Bucket(bucket).Object(object).ACL()
if err := acl.Set(ctx, entity, role); err != nil {
return fmt.Errorf("ACLHandle.Set: %v", err)
}
fmt.Fprintf(w, "Blob %v is now publicly accessible.\n", object)
return nil
}
您应该在将对象上载到bucket后将其设置为公共对象。正如您所看到的,您可以使用下面的代码将它们公开
func makePublic(w io.Writer, bucket, object string, entity storage.ACLEntity, role storage.ACLRole) error {
// bucket := "bucket-name"
// object := "object-name"
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
return fmt.Errorf("storage.NewClient: %v", err)
}
defer client.Close()
ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
acl := client.Bucket(bucket).Object(object).ACL()
if err := acl.Set(ctx, entity, role); err != nil {
return fmt.Errorf("ACLHandle.Set: %v", err)
}
fmt.Fprintf(w, "Blob %v is now publicly accessible.\n", object)
return nil
}
如果将其设置为publicRead,它是否工作?如果将其设置为publicRead,它是否工作