如何使用 Go Firebase Admin SDK 获取下载 URL

问题描述 投票:0回答:1

我有一个网络服务器,需要允许管理员上传图像和用户查看图像。

我可以这样上传文件:

    bucket, err := client.DefaultBucket()
    if err != nil {
        return "", fmt.Errorf("client.DefaultBucket: %v", err)
    }

    fileName := fmt.Sprintf("%v/%v", bucketName, object)

    // Upload an object with storage.Writer.
    wc := bucket.Object(fileName).NewWriter(ctx)
    wc.ChunkSize = 0 // note retries are not supported for chunk size 0.

    if _, err = io.Copy(wc, buf); err != nil {
        return "", fmt.Errorf("io.Copy: %v", err)
    }
    // Data can continue to be added to the file until the writer is closed.
    if err := wc.Close(); err != nil {
        return "", fmt.Errorf("Writer.Close: %v", err)
    }

但是获取可下载的 URL 是另一回事。

我发现它可以与模拟器套件一起使用:

    url := wc.Attrs().MediaLink

但是,在生产中,在浏览器中打开链接时出现 401 错误,并且在 html 响应中将它们用作 src url 时出现损坏的图像。

我知道有能力获得持续较短时间的 SignedURL。这是不切实际的,而且完全不可能。 我的服务器无法承受每次页面加载时使用 GetSignedURL 来加载数百张图像的费用。

我的前端是免费的 javascript,因此使用客户端 javascript SDK 也不是一个选择。

目标是上传图像,获取下载网址,并将下载网址与其他数据一起保存在数据库中。

使用 Golang Firebase Admin SDK 可以做到这一点吗?

go firebase-storage firebase-admin
1个回答
0
投票

我不确定,因为我没有尝试过,我浏览了 storage-signed-url-object-gostart#go_1 的在线文档,所以请告诉我任何信息,我欢迎任何意见或建议来自主题专家的相同意见。

client, err := storage.NewClient(ctx) // ctx := context.Background() pass it to function or else your choice .
if err != nil {
    return "", err
}
defer client.Close()

attrs, err := client.Bucket(bucket).Object(object).Attrs(ctx)
if err != nil {
    return "", err
}

url, err := storage.SignedURL(bucket, object, &storage.SignedURLOptions{
    Method: "GET",
    Expires: time.Now().Add(time.Hour),
})
if err != nil {
    return "", err
}

return url, nil
© www.soinside.com 2019 - 2024. All rights reserved.