Чтение файла JSON непосредственно из хранилища Google (с использованием облачных функций)

# #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);