Нужно получить публичный URL для файлов из Firebase Storage - PullRequest
0 голосов
/ 07 апреля 2019

Я работаю с облачными функциями Firebase.Я написал функцию, которая запускается по событию OnCreate из базы данных Firebase Realtime.В настоящее время эта функция успешно загружает PDF-документ, но я хочу, чтобы общедоступный URL-адрес этого загруженного документа позволял каждому просматривать и просматривать документ.

index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const PDFDocument = require("pdfkit");
const os = require("os");
const fs = require("fs");
const path = require("path");

admin.initializeApp();

  exports.addMessage = functions.database.ref('/messages/{pushId}/')
    .onCreate((snapshot, context) => {
        const original = snapshot.val();
        console.log(snapshot);


        const bucket = admin.storage().bucket();
        const filePath = "filename.pdf";
        const tmpFilePath = path.join(os.tmpdir(), path.basename(filePath));

        var pdf = new PDFDocument({
                                    size: 'A4', 
                                    info: {Title: 'Tile of File', Author: 'Author'}
                            });
            pdf.text('Emergency Incident Report');

        pdf.pipe(
                 // TODO: figure out how / where to store the file
                    fs.createWriteStream( tmpFilePath )
                ).on('finish', function () {
                console.log('PDF closed');

        return bucket.upload(tmpFilePath, {
                destination: 'resized-' + path.basename(filePath),

                            }).then((obj)=>{

                                                console.log(obj);
                                                const upFile = obj[0];
                                                return  upFile.getSignedUrl({ action: 'read', expires: '03-17-2025'}).then((urlUp)=>{

                                                                            console.log(urlUp[0]);
                                                                });
                                });

});

pdf.end();


});

Но этот код регистрирует ошибку ниже в firebase

A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified. Identity and Access Management (IAM) API has not been used in project 575455681031 before or it is disabled. Enable it by visiting **THIS URL**  then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
    at GaxiosError (/user_code/node_modules/firebase-admin/node_modules/gaxios/build/src/common.js:17:9)
    at Gaxios.<anonymous> (/user_code/node_modules/firebase-admin/node_modules/gaxios/build/src/gaxios.js:72:27)
    at next (native)
    at fulfilled (/user_code/node_modules/firebase-admin/node_modules/gaxios/build/src/gaxios.js:16:58)
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

Я пробовал следующие решения, но ничего не работает

Получить URL-адрес загрузки из файла, загруженного с помощью облачных функций для Firebase

Получить общедоступный URL-адрес загрузки из загруженного файла в хранилище firebase с помощью API отдыха Java

Что я пытаюсь сделать?

Я успешно загружаю документ в хранилище Firebase после того, как это сделано. Я пытаюсь получить URL загрузки для этого документа, чтобы я мог сохранить URL в Firebase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...