问题描述
使用 Firebase 函数在 Firebase 存储中上传文件后,我想获取文件的下载网址.
After uploading a file in Firebase Storage with Functions for Firebase, I'd like to get the download url of the file.
我有这个:
...
return bucket
.upload(fromFilePath, {destination: toFilePath})
.then((err, file) => {
// Get the download url of file
});
目标文件有很多参数.甚至一个名为mediaLink
.但是,如果我尝试访问此链接,则会收到此错误:
The object file has a lot of parameters. Even one named mediaLink
. However, if I try to access this link, I get this error :
匿名用户没有 storage.objects.get 访问对象......
谁能告诉我如何获取公共下载地址?
Can somebody tell me how to get the public download Url?
谢谢
推荐答案
您需要使用 getSignedURL 通过 @google-cloud/storage NPM 模块.
You'll need to generate a signed URL using getSignedURL via the @google-cloud/storage NPM module.
示例:
const gcs = require('@google-cloud/storage')({keyFilename: 'service-account.json'});
// ...
const bucket = gcs.bucket(bucket);
const file = bucket.file(fileName);
return file.getSignedUrl({
action: 'read',
expires: '03-09-2491'
}).then(signedUrls => {
// signedUrls[0] contains the file's public URL
});
您需要使用 @google-cloud/storagerel="noreferrer">您的服务帐户凭据,因为应用程序默认凭据是不够的.
You'll need to initialize @google-cloud/storage
with your service account credentials as the application default credentials will not be sufficient.
更新:现在可以通过 Firebase Admin SDK 访问 Cloud Storage SDK,充当@google-cloud/storage 的包装器.唯一的方法是:
UPDATE: The Cloud Storage SDK can now be accessed via the Firebase Admin SDK, which acts as a wrapper around @google-cloud/storage. The only way it will is if you either:
- 使用特殊服务帐户初始化 SDK,通常是通过第二个非默认实例.
- 或者,在没有服务帐户的情况下,向默认 App Engine 服务帐户授予signBlob"权限.
这篇关于从使用 Cloud Functions for Firebase 上传的文件中获取下载 URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!