是否可以直接访问Firebase存储资源URL?

是否可以直接访问Firebase存储资源URL?,firebase,firebase-storage,Firebase,Firebase Storage,我正在构建一个跨平台的移动应用程序,它使用Firebase进行数据存储和用户身份验证。我还使用了一个SDK,它需要一些mp4文件的直接URL。到目前为止,我们已经在单独的服务器上托管了这些视频文件,但由于Firebase的简单性/可扩展性,我希望将它们存储在它上面,而不是单独存储。我需要能够有一个直接的URL文件,但是 当我使用文件的Firebase存储位置从浏览器访问测试文件时,例如: APPNAME.appspot.com/RESOURCENAME.mp4 我得到一个404错误 我已将我的

我正在构建一个跨平台的移动应用程序,它使用Firebase进行数据存储和用户身份验证。我还使用了一个SDK,它需要一些mp4文件的直接URL。到目前为止,我们已经在单独的服务器上托管了这些视频文件,但由于Firebase的简单性/可扩展性,我希望将它们存储在它上面,而不是单独存储。我需要能够有一个直接的URL文件,但是

当我使用文件的Firebase存储位置从浏览器访问测试文件时,例如:

APPNAME.appspot.com/RESOURCENAME.mp4
我得到一个404错误

我已将我的规则设置为以下内容:

service firebase.storage {
    match /b/{bucket}/o {
        match /{allPaths=**} {
            allow write: if request.auth != null;
            allow read: if true;
        }
    }
}
有没有办法直接从URL访问Firebase存储资源


编辑:我应该补充一点,我需要的url不是随机生成的,而是基于文件在存储中的逻辑位置,因为资源文件是根据应用程序中文件的UUID动态访问的。文件太多,无法存储/查找不可用的链接。

云存储中文件的默认访问权限由您的安全规则控制。这是故意的

但无论何时通过Firebase SDK上传文件,它都会为该文件生成一个所谓的下载URL。下载URL是一个不可用的URL,提供对文件的只读访问。它用于按照您在此处描述的方式与应用程序的其他用户共享


要生成下载URL,请按照此处文档中的说明进行操作:(其他平台的文档中也有类似的部分)。

虽然这不是您问题的答案,但您确实应该使用它。Firebase存储比静态内容更适合用户上传和共享


使用Firebase CLI上传到主机非常简单。您只需将要承载的文件放在“public”文件夹中,然后运行
firebase deploy

我试图解决与您相同的问题。所以我检查了Firebase存储并点击了一个图像。在那里,你应该看到你的图像在一个小版本。检查Firebase存储它的位置并找到它所在的URL。这有点像:

https://firebasestorage.googleapis.com/v0/b/" + yourappname + ".appspot.com/o/images%2F" +  imagename+ "?alt=media
我还将读写设置更改为:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
      allow write: if request.auth != null;
    }
  }
}

意识到这篇文章现在有点流行了,但这里有一个我的工作函数(为Vue.js 2编写),它用下载和在网页上显示图像所需的正确URL更新firestore文档(“profilePic”)中的一个字段。未使用音频文件进行测试

submitImage(){
const user=firebase.auth().currentUser;
var storageRef=存储
.ref()
.child(`user/${user.uid}`)
.child(this.file.name);
//使用图像更新存储区域,并将正确的下载URL添加到数据库中
storageRef
.put(此.file)
.然后(函数(){
log(`Successfully upload profile picture!`);
storageRef.getDownloadURL().then(函数(url){
轮廓
.doc(user.uid)
.update({profilePic:url})
.然后(函数(){
log(“成功更新的路径”);
})
.catch(函数(错误){
错误(“更新有问题”,错误);
});
});
this.file=null;
})
.catch(函数(错误){
log(“上传图片时出错-”,错误);
});
}