【问题标题】:firebase Google Cloud storage download URL has folder name which becomes file namefirebase Google Cloud 存储下载 URL 的文件夹名称变为文件名
【发布时间】:2016-12-01 08:43:49
【问题描述】:

我们正在使用 Firebase Google Cloud Storage Bucket 来存储我们的文件。

当登录用户想要下载保存在某个文件夹中的文件时 例如:123/admin/1469611803143/123.xlsx

生成的 url 将是 https://firebasestorage.googleapis.com/v0/b/MYWEBSITE.appspot.com/o/123%2Fadmin%2F1469611803143%2F123.xlsx?alt=media&token=whatever_alpa_numeric_token

当我下载这个文件时,文件名将是 123%2Fadmin%2F1469611803143%2F123.xlsx

而不是 123.xlsx

我们已经尝试使用下载属性来更改文件名

但这并没有将文件名更改为 123.xlsx

请帮忙

【问题讨论】:

    标签: html google-chrome firebase google-cloud-storage firebase-storage


    【解决方案1】:

    我对 firebase 很陌生,但我通过以下代码实现了这一点:

    var storageRef = firebase.storage().ref();
    var child = storageRef.child("your path");
    var uploadTask = child.put(<file>);
    
    uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,
    function(snapshot){
    // HANDLE TASK PROGRESS
    },
    function(error){
    // HANDLE ERROR
    },
    function(){
    // UPLOAD SUCCESSFULL
      var newMetadata = {
        contentDisposition : "attachment; filename=" + fileName
      }
      child.updateMetadata(newMetadata)
    })  
    

    【讨论】:

    • 太棒了!完美运行
    • 设置contentDisposition 元数据是正确的方法。请注意:该元数据字段不会显示在 Firebase 存储 Web 控制台中。不过,您可以使用 gsutil 查看它。
    【解决方案2】:

    这是(幸运或不幸)预期的行为。从技术上讲,Firebase 存储中的文件以完整路径存储(因此 123%2Fadmin%2F1469611803143%2F123.xlsx 实际上是文件名——斜杠和百分比转义是名称的一部分,并且仅在 UI 中表示为路径分隔符),这就是如何我们得到了这种行为。

    我们可能会在未来修改下载的工作方式(因为我们将截断名称),但我们一直在忙于修复其他错误并完善优先级更高的部分。

    【讨论】:

    • 有没有办法通过在我们上传文件时设置 content-disposition 或生成包含 response-content-disposition 的签名 URL 来克服它
    • 我们使用以下代码在存储上传前设置元数据 var metadata = { "contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Content-Disposition":"attachment ;filename="+file.name };但是这个元数据没有被设置。我们应该如何使用文件名设置 Content-Disposition 元数据将设置这个工作吗?
    • 请创建一个新问题并包含错误等。我们很难在没有示例的情况下尝试此操作,并且更难判断错误是什么(如果有的话)。
    • 看起来这在 5 年后仍然是一个问题。设置内容处置似乎没有任何效果,令人沮丧的是,“名称”值正是我们想要的。
    • 经过一番研究,似乎contentDisposition 需要为存储进行特殊格式化。通过 gsutil 查看通过控制台手动上传的文件的元数据,它们具有内联处置:"inline; filename*=utf-8''YOUR_FILE.ext"。将这个特定的contentDisposition 添加到文件写入中可以使下载名称正常工作。
    猜你喜欢
    • 2023-04-01
    • 2020-01-25
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多