【发布时间】: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