# #node.js #google-cloud-platform #google-cloud-storage
Вопрос:
Я создал функцию, которая извлекает определенный атрибут из файла JSON, но этот файл был вместе с функцией в облачных функциях. В этом случае я просто прикреплял файл и мог ссылаться на определенный атрибут:
const jsonData = require('./data.json');
const result = jsonData.responses[0].fullTextAnnotation.text;
return resu<
В конечном счете, я хочу прочитать этот файл непосредственно из облачного хранилища, и здесь я попробовал несколько решений, но безуспешно. Как я могу прочитать файл JSON непосредственно из хранилища Google, чтобы, как и в первом случае, я мог правильно прочитать его атрибуты?
Комментарии:
1. Существует множество учебных пособий и примеров на многих языках для чтения файлов в облачном хранилище. Покажите, что вы пробовали, код и ошибки.
Ответ №1:
Чтобы четко ответить на вопрос: вы не можете!
Сначала вам нужно загрузить файл локально, а затем обработать его. Вы не можете прочитать его непосредственно из GCS.
С помощью облачных функций вы можете хранить файл только в /tmp
каталоге, он единственный доступный для записи. Кроме того, это файловая система в памяти, что означает несколько вещей:
- Размер ограничен памятью, настроенной для облачной функции. Объем памяти распределяется между объемом памяти вашего приложения и хранилищем файлов
/tmp
(например, вы не сможете загрузить файл объемом 10 ГБ). - Память теряется, когда экземпляр выходит из строя и
- Все экземпляры облачных функций имеют свое собственное пространство памяти. Вы не можете обмениваться файлами между всеми облачными функциями
/tmp
Каталог не очищается между вызовами 2 функций (в одном экземпляре). Подумайте о том, чтобы очистить этот каталог.
Ответ №2:
Как упоминалось в комментарии, API облачного хранилища позволяет вам многое делать через API. Вот пример из документации о том, как загрузить файл из облачного хранилища для справки.
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';
// The ID of your GCS file
// const fileName = 'your-file-name';
// The path to which the file should be downloaded
// const destFileName = '/local/path/to/file.txt';
// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
// Creates a client
const storage = new Storage();
async function downloadFile() {
const options = {
destination: destFileName,
};
// Downloads the file
await storage.bucket(bucketName).file(fileName).download(options);
console.log(
`gs://${bucketName}/${fileName} downloaded to ${destFileName}.`
);
}
downloadFile().catch(console.error);