【问题标题】:Saving image to firebase bucket doesnt have auth on link将图像保存到 Firebase 存储桶没有链接上的身份验证
【发布时间】:2019-02-13 20:23:02
【问题描述】:

我目前正在我的 firebase 数据库中将图像保存为 url,但是我需要将这些图像转换为 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 存储桶?

【问题讨论】:

    标签: firebase google-cloud-functions firebase-storage


    【解决方案1】:

    您不应尝试手动构建下载 URL。这些 URL 由 Cloud Storage 生成。你不能简单地发明一个你自己的。

    如果您需要为添加到 Cloud Storage 的文件生成 URL,则需要使用提供的 API 在客户端或服务器上执行此操作。

    您可以通过generating a download url在客户端生成下载网址(链接说明适用于网络,但您可以在任何客户端平台上执行此操作)。

    您可以通过使用云存储节点SDK生成signed url在服务器上生成下载URL(方法为getSignedUrl)。

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2022-11-25
      • 2020-06-26
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多