Создание и загрузка PDF-файла в хранилище firebase с использованием облачных функций? (можно загружать локально файл, но не из облачных функций)

#node.js #google-cloud-functions #firebase-storage #pdfkit

# #node.js #google-cloud-функции #firebase-хранилище #pdfkit

Вопрос:

 const { Storage } = require("@google-cloud/storage");
const storage = new Storage({
keyFilename: "./xxx-path-to-key(locally).json",
projectId: "my project ID",
});

exports.get_data = functions.https.onRequest(async (req, res) => {

const pdf = async () => {
const doc = new PDFDocument();
doc.text("Hello, World!");
doc.end();
return await getStream.buffer(doc);
};

const pdfBuffer = await pdf();
const pdfBase64string = pdfBuffer.toString("base64"); //getting string which I want to send to storage like pdf file

const bucketName = "gs://path-to-storage.com/"
let filename = "test_file.pdf" //some locally pdf file (but can't save locally while using cloud functions) 

const uploadFile = async () => {
// Uploads a local file to the bucket
await storage.bucket(bucketName).upload(filename, { //this one fine works for locally uploading
  metadata: {
    cacheControl: "public, max-age=31536000",
    contentType: "application/pdf",
  },
});

console.log(`${filename} uploaded to ${bucketName}.`);
};

uploadFile();

})
 

Мне нужно создать PDF-файл с использованием облачных функций и загрузить его в хранилище firebase.
Я создал pdfBase64string — и мне просто нужно сохранить эту строку-pdf в хранилище, но не могу найти информацию для этого.
Я пробовал много разных способов, но застрял, потому что ответы Google заканчиваются.

Ответ №1:

Обратите внимание, что вы используете облачное хранилище, а не библиотеку хранилища Firebase. Вы можете загружать с:

 // Create a root reference
var storageRef = firebase.storage().ref();
// Create a reference to 'mountains.pdf'
var ref = storageRef.child('mountains.pdf');
// Base64 formatted string
var message = '5b6p5Y 344GX44G 44GX44Gf77yB44GK44KB44Gn44Go44GG77yB';
ref.putString(message, 'base64').then(function(snapshot) {
  console.log('Uploaded a base64 string!');
});
 

из документации

Теперь,

  1. Чтобы получить доступ к хранилищу Firebase из облачных функций, вам необходимо добавить роль редактора Firebase в учетную запись службы облачных функций.
  2. В качестве альтернативы вы можете использовать функцию Firebase для загрузки в хранилище Firebase.

Библиотека облачного хранилища отличается от библиотеки хранилища Firebase.

Комментарии:

1. Если у вас все еще возникают проблемы, пожалуйста, укажите указанную ошибку и трассировку.

2. Привет! Спасибо за ответ, это почти сделано, но все еще есть другая ошибка «Строка не соответствует формату ‘base64’: найден недопустимый символ (хранилище / недопустимый формат)» var storageRef = firebase.storage().ref(); var ref = storageRef.child("file.pdf"); const doc = new PDFDocument(); doc.text("Hello, World!"); doc.end(); const pdfBuffer = await getStream.buffer(doc); const pdfBase64string = pdfBuffer.toString("base64"); ref .putString(pdfBase64string, "base64", { contentType: "application/pdf" }) .then(function (snapshot) { console.log("Uploaded a base64 string!") })

3. Я нашел связанный выпуск GitHub, который может оказаться полезным.