Сохранение изображения в ведро Firebase не имеет аутентификации по ссылке - PullRequest
0 голосов
/ 09 сентября 2018

В настоящее время я сохраняю изображения в виде URL-адресов в моей базе данных Firebase, однако мне нужно преобразовать их в сохраненные изображения в корзине Firebase. Я беру URL-адрес, сохраняю его в хранилище firebase и затем заменяю узел изображения новым URL-адресом ссылки на хранилище firebase, который затем можно поместить в тег 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?

1 Ответ

0 голосов
/ 09 сентября 2018

Не следует пытаться вручную создать URL для загрузки.Эти URL-адреса создаются облачным хранилищем.Вы не можете просто изобрести свой собственный.

Если вам нужно сгенерировать URL-адрес для файла, который вы добавляете в облачное хранилище, вам придется сделать это либо на клиенте, либо на сервере, используя предоставленныйAPI.

Вы можете создать URL-адрес для загрузки на клиенте, сгенерировав URL-адрес для загрузки (связанные инструкции предназначены для Интернета, но вы можете сделать это на любой клиентской платформе).

Вы можете создать URL-адрес для загрузки на сервере, создав подписанный URL-адрес , используя SDK узла Cloud Storage (метод getSignedUrl ).

...