Как установить место назначения для file.download () в Google Cloud Storage? - PullRequest
0 голосов
/ 07 ноября 2018

Документация Google Cloud Storage для download() предполагает, что можно указать папку назначения:

file.download({
  destination: '/Users/me/Desktop/file-backup.txt'
}, function(err) {});

Независимо от того, какое значение я добавлю в свой файл, оно всегда загружается в Firebase Cloud Storage на корневом уровне. Этот вопрос говорит о том, что путь не может иметь начальную косую черту, но изменение примера на

file.download({
  destination: 'Users/me/Desktop/file-backup.txt'
}, function(err) {});

не имеет значения.

Изменение пункта назначения на

file.download({
      destination: ".child('Test_Folder')",
    })

привело к сообщению об ошибке:

EROFS: read-only file system, open '.child('Test_Folder')'

Какой правильный синтаксис для облачного хранилища destination (папка и имя файла)?

Изменение корзины с myapp.appspot.com на myapp.appspot.com/Test_Folder привело к сообщению об ошибке:

Cannot parse JSON response

Кроме того, в качестве примера указывается путь к жесткому диску персонального компьютера. Кажется странным настроить папку Cloud Storage для Desktop. Означает ли это, что есть способ указать место назначения, отличное от Cloud Storage?

Вот мой код:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();

exports.Storage = functions.firestore.document('Storage_Value').onUpdate((change, context) => {

  const {Storage} = require('@google-cloud/storage');
  const storage = new Storage();
  const bucket = storage.bucket('myapp.appspot.com');

  bucket.upload('./hello_world.ogg')
  .then(function(data) {
    const file = data[0];
    file.download({
    destination: 'Test_Folder/hello_dog.ogg',
  })
    .then(function(data) {
      const contents = data[0];
      console.log("File uploaded.");
    })
    .catch(error => {
      console.error(error);
    });
  })
  .catch(error => {
    console.error(error);
  });
  return 0;
});

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Спасибо, Даг, код работает:

exports.Storage = functions.firestore.document('Storage_Value').onUpdate((change, context) => {

  const {Storage} = require('@google-cloud/storage');
  const storage = new Storage();
  const bucket = storage.bucket('myapp.appspot.com');

  const options = {
    destination: 'Test_Folder/hello_world.dog'
  };

  bucket.upload('hello_world.ogg', options)
  .then(function(data) {
    const file = data[0];
  });

  return 0;
});

Функция получает файл hello_world.ogg из папки functions моего проекта, затем записывает его в Test_Folder в моем облачном хранилище Firebase и меняет имя файла на hello_world.dog. Я скопировал URL загрузки, и аудио файл воспроизводится отлично.

Вчера мне показалось странным, что запись файла в облачное хранилище называется download(), тогда как upload() имеет больше смысла. : -)

0 голосов
/ 08 ноября 2018

Согласно документации :

Единственной записываемой частью файловой системы является каталог / tmp, который Вы можете использовать для хранения временных файлов в экземпляре функции. Это точка монтирования локального диска, известная как том «tmpfs», в который записываются данные Объем хранится в памяти. Обратите внимание, что он будет потреблять память ресурсы, выделенные для функции.

Остальная часть файловой системы доступна только для чтения и доступна для функция.

Вы должны использовать os.tmpdir(), чтобы получить лучший доступный для записи каталог для текущего времени выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...