Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何以编程方式将图像上载为公共?_Go_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

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,它是否工作