Google云端存储图片上传

时间:2017-02-20 01:33:04

标签: go google-cloud-storage google-cloud-platform

我在Golang上将base64图像上传到Google云端存储时遇到了一些小问题。我可以上传,但它可以工作,但客户端必须发送没有任何额外数据的图像,如下例所示:

不工作 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAABGdBTUEAALGPC/xhBQAAAClJREFUCB1jnD59+n8GLIAFJObo6IgitX//fgYmFBEkDukSYDtAZqIDAAh8CBGQqUSHAAAAAElFTkSuQmCC

作品 iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAABGdBTUEAALGPC/xhBQAAAClJREFUCB1jnD59+n8GLIAFJObo6IgitX//fgYmFBEkDukSYDtAZqIDAAh8CBGQqUSHAAAAAElFTkSuQmCC

有没有办法上传整个base64字符串,包括元数据?或者我应该总是删除字符串的开头吗?

以下代码:

func UploadProduct(ctx context.Context, product *Product) error {
    reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(product.PhotoURL))

    bucketName, err := file.DefaultBucketName(ctx)
    if err != nil {
        return err
    }
    client, err := storage.NewClient(ctx)
    if err != nil {
        return err
    }
    defer client.Close()

    bucket := client.Bucket(bucketName)

    name := product.Name + strconv.Itoa(int(product.Volume)) + ".png"

    w := bucket.Object("products/" + name).NewWriter(ctx)

    w.ACL = []storage.ACLRule{{Entity: storage.AllUsers, Role: storage.RoleReader}}
    w.CacheControl = "public, max-age=86400"

    if _, err := io.Copy(w, reader); err != nil {
        return err
    }
    if err := w.Close(); err != nil {
        return err
    }

    url := "https://storage.googleapis.com/" + bucketName + "/products/" + name
    product.PhotoURL = url

    return nil
}

提前致谢!

0 个答案:

没有答案