Я использую функцию Google Cloud, запускаемую https, которая должна загружать файл из Google Cloud Storage (а затем объединять его с данными из req.body). Хотя кажется, что это работает, пока загруженный файл находится в корневом каталоге, у меня возникают проблемы с доступом к тому же файлу, когда он помещен в папку. Путь к файлу documents/someTemplate.docx
'use strict';
const functions = require('firebase-functions');
const path = require('path');
const os = require("os");
const fs = require('fs');
const gcconfig = {
projectId: "MYPROJECTNAME",
keyFilename: "KEYNAME.json"
};
const Storage = require('@google-cloud/storage')(gcconfig)
const bucketPath = 'MYPROJECTNAME.appspot.com'
const bucket = Storage.bucket(bucketPath);
exports.getFileFromStorage = functions.https.onRequest((req, res) => {
let fileName = 'documents/someTemplate.docx'
let tempFilePath = path.join(os.tmpdir(), fileName);
return bucket.file(fileName)
.download({
destination: tempFilePath,
})
.then(() => {
console.log(fileName + ' downloaded locally to', tempFilePath);
let content = fs.readFileSync(tempFilePath, 'binary');
// do stuff with the file and data from req.body
return
})
.catch(err => {
res.status(500).json({
error: err
});
});
})
Я не понимаю, что когда я перемещаю файл в корневой каталог и использую вместо него имя файла someTemplate.docx
, код работает.
В документации Google говорится, что
Объекты, добавленные в папку, кажутся находящимися внутри папки в консоли GCP. В действительности все объекты существуют на уровне корзины и просто включают структуру каталогов в свое имя. Например, если вы создаете папку с именем pets и добавляете в нее файл cat.jpeg, консоль GCP создает впечатление, что файл существует в папке. На самом деле отдельного объекта папки не существует: файл просто существует в корзине и имеет имя pets / cat.jpeg.
Это кажется правильным, поскольку в метаданных имя файла действительно documents/someTemplate.docx
. Поэтому я не понимаю, почему приведенный выше код не работает.