有没有办法覆盖firebase存储中保存的文件?

时间:2017-01-02 09:06:09

标签: ionic-framework firebase-storage

我正在处理我的离子1 App中的个人资料图片。我正在寻找一种方法来更新firebase存储中的文件,以便下载链接保持不变。 是否有可能或以任何其他方式达到要求?

4 个答案:

答案 0 :(得分:1)

您无法更新文件并维护相同的公共下载链接 - 它是一个不同的文件,因此您可能希望更改访问权限

只需重新获取网址并在文件更新后下载该文件(它在上传时返回的元数据中实际返回,因此您可以在更改后立即将其发送到其他应用,无需单独获取URL:

var file = ... // use the Blob or File API
ref.put(file).then(function(snapshot) {
  var url = snapshot.downloadURL;
});

答案 1 :(得分:1)

嘿,我最近正在处理类似的事情。根据文档,没有直接的方法来覆盖现有文件,但我确实找到了一种方法来执行此操作并检索新的 url。这是我存储和更新的方式。

const storeFile = async (file) => {
    const ref = firebase.firestore.collection('bin').doc();
    const id = ref.id;
    const storageRef = firebase.storage().ref().child('bin/' + id)
    await storageRef.put(file)
}

const updateFile = async (id, file) => {
    const storageRef = firebase.storage().ref('/path').child(id);
    // Put the new file in the same child ref.
    await storageRef.put(file);
    // Get the new URL
    const url = await storageRef.getDownloadURL();
    return url;
}

答案 2 :(得分:0)

正如另一个答案所说,基本上你不能在不改变权限的情况下更新图像。

但是,如果您更改了存储图像路径的规则,请说

allow read: if true;
allow write: if request.auth != null;

这基本上使得任何有链接的人都可以看到图像。这样您就可以从旧的下载链接中看到新图像。

但请注意,这也意味着拥有此链接的任何人都可以看到图片,而不仅仅是应用中的人。

答案 3 :(得分:0)

文件更新应在https://console.cloud.google.com/storage上进行,并用相同的名称替换文件后,应使用 firebaseStorageDownloadTokens 键和以前使用的令牌来更新其元数据。