firebase - 将图像保存到 Firebase 存储桶没有链接上的身份验证
问题描述
我目前将图像作为 url 保存在我的 firebase 数据库中,但是我需要将它们转换为 firebase 存储桶中保存的图像。我抓取 url,将其保存到 firebase 存储,然后将图像节点替换为 firebase 存储链接的新 url,然后可以将其放入 img 标签中。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const bucket = admin.storage().bucket();
const request = require('request');
exports.saveToStorage = functions.database.ref(`/events/{eventID}`)
.onCreate(snapshot => {
const firebaseUrl = `https://firebasestorage.googleapis.com/v0/b/${FIREBASE_ID}.appspot.com/o/`;
const filePath = snapshot.val().image;
const fileKey = snapshot.key;
const filename = filePath.split('/').pop();
const firebasePath = firebaseUrl+filename;
const remoteWriteStream = bucket.file(filename).createWriteStream({
metadata: { contentType: 'image/jpeg' }
});
request(filePath).pipe(remoteWriteStream)
.on('error', (err) => console.log(err))
.on('finish', () => {
console.log("Image saved successfully");
//replace old image with new image path saved in firebase storage
return snapshot.ref.parent.child(fileKey+'/image').set(firebasePath);
});
});
当前的问题是一切似乎都可以正常工作,但获得的链接似乎没有身份验证,并且从通过此方法获得的链接无法查看图像。
可以这样做,还是我需要将图像从 url 转换为二进制数据,然后上传到 firebase 存储桶?
解决方案
您不应该尝试手动构建下载 URL。这些 URL 由 Cloud Storage 生成。你不能简单地发明一个你自己的。
如果您需要为添加到 Cloud Storage 的文件生成 URL,则需要使用提供的 API 在客户端或服务器上执行此操作。
您可以通过生成下载 url 在客户端生成下载 URL(链接说明适用于 Web,但您可以在任何客户端平台上执行此操作)。
您可以通过使用 Cloud Storage 节点 SDK 生成签名 URL(方法为getSignedUrl)在服务器上生成下载 URL 。
推荐阅读
- html - 悬停链接元素的一个元素
- javascript - 如何删除 JS 数组中的空尾随值和回车?
- javascript - 如何允许带有 Flask 的 CORS 获得对预检请求的响应没有 http ok 状态
- ruby-on-rails - Rails 更改列以接受 Null 并更改列类型
- python - Python:用开始和结束分隔符分割一个单词,并将分隔符保留在里面
- php - mysqldump返回空文件
- r - 期望 B2 / R2C2 中的数字:在 R 中获得日期
- javascript - Discord.js 代码无法发送嵌入消息
- docker - Mac下将本地代理传递给docker容器
- tcl - 明显不一致的读/写变量