Я использую Firebase Cloud Functions для создания и загрузки .csv
отчета.Файл не загружается в корзину gsc.Сначала я преобразовываю .json
в .csv
и загружаю файл, а затем меняю статус на загруженный, но загрузка не работает.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const fs = require('fs-extra');
const gcs = require('@google-cloud/storage');
const path = require('path');
const os = require('os');
const json2csv = require('json2csv');
exports.createCSV = functions.firestore
.document('reports/{reportId}')
.onCreate(event => {
// Step 1. Set main variables
const reportId = event.params.reportId;
const fileName = `reports/${reportId}.csv`;
const tempFilePath = path.join(os.tmpdir(), fileName);
// Reference report in Firestore
const db = admin.firestore();
const reportRef = db.collection('reports').doc(reportId);
// Reference Storage Bucket
const storage = gcs.bucket('my-bucket-url'); // or set to env variable
// Step 2. Query collection
return db.collection('subscription_list')
.get()
.then(querySnapshot => {
/// Step 3. Creates CSV file from with orders collection
const orders = [];
// create array of order data
querySnapshot.forEach(doc => {
orders.push( doc.data() )
});
return json2csv.parse({ data: orders });
})
.then(csv => {
// Step 4. Write the file to cloud function tmp storage
return fs.outputFile(tempFilePath, csv);
})
.then(() => {
// Step 5. Upload the file to Firebase cloud storage
return storage.upload(tempFilePath, { destination: fileName })
})
.then(file => {
// Step 6. Update status to complete in Firestore
return reportRef.update({ status: 'complete' })
})
.catch(err => console.log(err) )
});
ПРИМЕЧАНИЕ. Правила безопасности сначала должны пройти проверку подлинности.
Ошибка, которую я получаю:
FirebaseStorageError {code_: «хранилище / объект не найден», сообщение_: «Отчеты Firebase: объект» сообщает / ByVUWzqI8igdUUWu2L82.csv 'делаетне существует. ", serverResponse_:" {↵ "error": {↵ "code": 404, ↵ "message": "Not Found.Не удалось получить объект "↵} ↵}", name_: "FirebaseError"}