Как загрузить файл в облачной функции Firebase в хранилище Firebase с URL? - PullRequest
0 голосов
/ 24 марта 2020

Я использую некоторый API, который может дать мне файл двумя способами:

- I can get FILE in response
- I can get direct URL to the file to download

Я решил сделать запрос первым методом, получить FILE в ответ. Я пытаюсь сохранить файл в хранилище Firebase, из функции облака Firebase:

exports.test = functions.region('europe-west1').https.onRequest(async (req, res) => {
  const axios = require('axios').default

  axios({
    method: 'get',
    url: `https://cloudpbx.beeline.ru/apis/portal/v2/records/06365a27-f8d1-4c51-bba3-a08802429964/9052948777%40mpbx.sip.beeline.ru/download`
  }).then((resp) => {
    console.log('resp', resp.data)

    const bucket = admin.storage().bucket('cardbox-1.appspot.com/mcun/calls')
    bucket.upload(resp.data)
  })
})

В resp.data У меня есть что-то вроде этого:

��H�Xing��h  $&)+-.179:>ACEGINRTW[_acegjmoqtwz|����������������������������������������������������PLAME3.100(,�$!��h�6���H��V]@mdE�E��"@���}�8kwT��&���>:P�2��>?�����8 ����������*���Z��XVC�(b�k�
D�G��

Как я могу видеть его файл сам по себе, но как с этим справиться и как загрузить его в хранилище firebase? Кроме того, я не уверен, что я правильно создаю корзину и использую API хранилища.

Пожалуйста, не стесняйтесь делать запрос, вы можете получить ответ без авторизации. Этот файл должен иметь тип mp3

Вот журналы с заголовками о том, что я получаю из ответа:

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Tue, 24 Mar 2020 16:19:55 GMT
Content-Type: application/octet-stream;charset=utf-8
Content-Length: 48744
Connection: close
Content-Disposition: attachment; filename=file.mp3

��H�Xing��h  $&)+-.179:>ACEGINRTW[_acegjmoqtwz|����������������������������������������������������PLAME3.100(,�$!��h�6���H��V]@mdE�E��"@���}�8kwT��&���>:P�2��>?�����8 ����������*���Z��XVC�(b�k�
D�G��
C���al�ꝰ�z�KY�Q�]ЪF�8�^���W;,�LUteA�%�u�&��.���
0�q��Cڟ#���6��@�K�h��Itᠠ|[�q�{j'�+  �ʤS<F�  Y�5D]?�����nlƦBC�S�Zx'�e�D�Fi_��Vl��4����H��E�z���SMVПQ�P� AT<���(�x�+3�ТB����e�ZC}t��Ї�#֗����2���Kve���.�ԏ�UH���u����ʘfbC��C� ��C�+ġ��̺��R#��|x5hq`Х3�?�N(���.5��� c+��`�Y�F8�d�B&53��¥�L�cx4��3��q�JHԓJ�43Ώ�(к�4r ��a �D
Dɍ0�

1 Ответ

0 голосов
/ 25 марта 2020

Что ж, похоже, здесь нужно выполнить несколько задач :)

В соответствии с определением метода загрузки и их примерами с использованием node js в качестве клиентской библиотеки (это имеет смысл). Вы сможете загрузить файл в корзину. Но, если честно, мне не очень понятно использование параметра pathString, поскольку он указывает на локальный путь. Может быть, вариант URL, который вы упомянули, было бы неплохо проверить в качестве функции.

Просто вставьте пример из документации:

  // Imports the Google Cloud client library
  const {Storage} = require('@google-cloud/storage');

  // Creates a client
  const storage = new Storage();

  async function uploadFile() {
    // Uploads a local file to the bucket
    await storage.bucket(bucketName).upload(filename, {
      gzip: true,
      metadata: {            
        Content-Type: 'audio/mpeg'            
      },
    });

        console.log(`${filename} uploaded to ${bucketName}.`);
  }

  uploadFile().catch(console.error);

Еще один способ выполнить sh это сделать запрос POST с JSON API для метода загрузки Cloud Storage. Как я понимаю, объекты сохраняются как "RAW" в облачном хранилище.

Если вас беспокоит конвертация в MP3-файл, я думаю, этот ответ очень хорошо объясняет. По сути, если вы хотите выполнить преобразование в функции Firebase, возможно, это не лучший сценарий в зависимости от размера / времени файлов.

Удачи!

...