微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloud Storage Admin:对象访问令牌以生成下载链接

如何解决Cloud Storage Admin:对象访问令牌以生成下载链接

我正在将Firebase Storage用于我的客户端应用程序,以将视频上传到Cloud Storage。 在上载时,我使用storageRef.getDownloadURL()从客户端生成一个下载链接,并将其添加到Firestore文档中。视频上传后,将触发云功能来处理视频。之后将其覆盖到Cloud Storage。到那时,我认为先前版本的访问令牌已被撤消,如果我尝试通过我保存在Firestore中的链接加载视频,则无法正确加载。我考虑的两个解决方案是1.从Cloud Functions中的admin API中以某种方式生成链接并更新db,或者2.使用某些标志/选项覆盖gcs对象而不丢失其凭证。但是我不确定如何做这两个。

这是我最初从客户端(Dart) 上传文件的方式:

final StorageReference storageRef = FirebaseStorage.instance
        .ref()
        .child('/challenge_proofs/${topic['id']}/${user.uid}/$fileId');

final StorageUploadTask uploadTask = storageRef.putFile(_video);
await uploadTask.onComplete;

print('Upload Status:');
print(uploadTask.isSuccessful);

storageRef.getDownloadURL().then((dynamic fileURL) async {
  print('Add fileURL to db here');
});

这是我将视频文件从Cloud Functions覆盖到存储(TypeScript)方法

// Inside triggered Cloud Function

const remoteFilename = `challenge_proofs/${proofData['challengeId']}/${proofData['ownerId']}/${proofData['mediaId']}`;
const generatedOutput = join(tmpdir,"videogen.mp4");
let downloadDest = '';

await bucket.file(remoteFilename).download({ destination: downloadDest });
// DOING FILE PROCESSING //
await bucket.upload(generatedOutput,{ destination: remoteFilename,resumable: false });

这是我的Firebase存储规则:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read,write: if false;
    }
    
    match /challenge_proofs/{challengeId}/{userId}/{allPaths=**} {
      allow read,write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

我注意到,在Firebase控制台中,客户端上传后有一个对象“访问令牌”,而在覆盖后消失了。

用户赞扬之后:

enter image description here

管理员(云功能上传后:(无“访问令牌”)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?