【问题标题】:Download Firebase Storage File on Express Request应快速请求下载 Firebase 存储文件
【发布时间】:2021-04-17 10:18:51
【问题描述】:

我正在尝试编写一个 Express API 端点,允许我在点击它时直接下载位于 Firebase 存储中的文件。它应该是这样的:

const app = require('express')();

app.get("/download", (req, res) => {
    // Download File on Client Side
});

app.listen(8080);

我曾尝试使用 Google-Cloud Storage(经过一番谷歌搜索),但我经常发现它找不到文件,所以我认为 Google-Cloud Storage 和 Firebase Storage 之间存在差异,我缺少一些初始化.我目前拥有的是:

const { Storage } = require("@google-cloud/storage");

const storage = new Storage({
    keyFilename: "/path/to/key/file.json",
});

有问题的密钥文件是在“设置”下的“服务帐户”中生成的“私钥”。

然后我尝试按如下方式访问该文件

storage
    .bucket("my-bucket")
    .file("test.txt")
    .createReadStream()
    .on("error", (err) => res.status(500).send("Internal Server Error"))
    .on("response", (storageResponse) => {
        res.setHeader(
            "content-type",
            storageResponse.headers["content-type"]
        );
        res.setHeader(
            "content-length",
            storageResponse.headers["content-length"]
        );
        res.status(storageResponse.status);
    })
    .on("end", () => res.end())
    .pipe(res);

文件“test.txt”位于存储的根文件夹中,“my-bucket”是bucket链接“gs://my-bucket.appspot.com”中使用的那个。

当控制台记录 storageResult 时,我得到

statusCode: 404,
statusMessage: 'Not Found'

href: 'https://storage.googleapis.com/storage/v1/b/my-bucket/o/test.txt?alt=media'

不应该附加一个令牌吗?此链接确实指向“未找到”页面...

对为什么这不起作用有什么想法吗?

【问题讨论】:

    标签: node.js firebase express google-cloud-storage


    【解决方案1】:

    在初始化存储客户端时,您似乎缺少项目 ID, 项目 ID 似乎没有在环境变量中默认设置。

    试试这个:

    const storage = new Storage({"projectId", "/path/to/key/file.json"});
    

    the docs 中所述。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2023-04-01
      • 2021-04-16
      相关资源
      最近更新 更多