Я пытаюсь использовать функцию onCall для firebase, чтобы загрузить CSV-файл из облачного хранилища, поместить его во временное хранилище облачной функции, затем прочитать и загрузить в коллекцию firestore, которая называется test. К сожалению, я не могу заставить работать временную память функции загрузки в облако.
Я пытался следовать документации Google по адресу https://firebase.google.com/docs/storage/extend-with-functions и другим примерам "return bucket.file (filePath) .download ({destination: tempFilePath}), но безуспешно.
Вот мой код
//THIS IS THE FUNCTION FOR LOADING AN PROCESSING A INCOMING CSV FILE
exports.uploadCSV = functions.https.onCall((data,context)=> {
//get the file name from the boday
const fileOne = data.id + '.csv';
console.log('fileOne', fileOne);
//bring together the director and file name
const fileName = 'uploads/' + fileOne;
console.log('fileName', fileName);
//setup the temporary path
const tmpFilePath = path.join(os.tmpdir(), fileName);
console.log('tmpFilePath', tmpFilePath);
//assign the Firbase project id
const projectId = 'xxxxxxxxx';
console.log('projectId')
//assign storage to the project
const storage = new Storage({ projectId: projectId });
console.log('new Storage')
//setup the bucket configuration
const bucket = admin.storage().bucket();
console.log('bucket', bucket)
//Reference Storage Bucket in firestore
const bucketName = 'xxxxxxxxx.appspot.com';
console.log('bucketName');
//sets myFile to value of file downloaded into cloud function temporary storage.
return storage.bucket(bucketName).file(fileName).download({destination: tmpFilePath})
.then(() => {
console.log('image downloaded to:', tmpFilePath)
//read stream and process
fs.createReadStream('tmpFilePath')
.pipe(csv())
.on('data', (row) => {
console.log(row);
if(row) {
firestore.collection('test').add({
name: row.Name
});
} else {console.log('no data')
}
})
.on('end', () => {
console.log('CSV file successfully processed.');
});
})
.then(() => {
//removes temporary directory
return fs.unlink(tmpFilePath);
})
.catch((err)=>{ console.log(err); });
});
Хотя сетевая консоль возвращает 200, это ошибка, которую я получаю в своих журналах firebase-функций.
{Ошибка: ENOENT: нет такого файла или каталога, откройте /tmp/uploads/somedata.csv
ошибка: -2,
код: «ENOENT»,
системный вызов: «открыто»,
путь: '/tmp/uploads/somedata.csv'}