如何将Firebase云功能中的文件从URL上传到Firebase存储中?

问题描述 投票:0回答:1

我正在使用一些API,可以通过2种方式给我文件:

- 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�
firebase google-cloud-firestore google-cloud-storage firebase-storage
1个回答
0
投票

嗯,似乎这里有几个任务要做:)

根据upload method及其示例的定义,使用节点js作为客户端库(这很有意义)。您将能够将文件上传到存储桶。但是老实说,我对pathString参数的用法不是很清楚,因为它指向本地路径。也许您提到的URL选项可以很好地作为功能进行测试。

只需从docs粘贴示例:

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

另一种实现方法,是使用JSON API向Cloud Storage的上载方法发出POST请求。据我了解,对象在Cloud Storage中的名称为saved为“ RAW”。

如果您担心转换为MP3文件,我认为此answer解释得很好。基本上,如果要在Firebase Function中执行转换,根据文件的大小/时间,可能不是最佳方案。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.