【问题标题】:Uploading files to Firebase Storage using REST API使用 REST API 将文件上传到 Firebase 存储
【发布时间】:2016-10-04 12:15:14
【问题描述】:

目前,Firebase 文档指导您使用其 JavaScript 库将文件上传到 Firebase 存储。

我正在运行没有安装 NodeJS 的服务器。是否可以通过 Firebase REST API 上传图像、音频等文件?

目前我在 bash 脚本中使用 curl 来发送 JSON。我不希望将 base64 编码存储在数据库字段中,我希望将文件存储在 Storage 部分内的文件夹中。

存储文件夹如下图:

【问题讨论】:

  • 你不需要nodejs服务器,firebase存储是客户端,你只需要一个包含firebase库和javascript脚本的html文件.....
  • @Ymmanuel 它在没有浏览器的服务器上运行。抱歉,您无法运行 HTML 页面。
  • 好吧,我现在明白了……现在只能使用 REST API 访问实时数据库……所以我认为没有节点服务器就无法上传文件跨度>
  • 明白。你知道 JavaScript 库是否使用 WebSockets 来传输数据吗?
  • 对不起我不知道

标签: javascript jquery json bash firebase


【解决方案1】:

Firebase 存储在后台使用 Google Cloud Storage,因此您可以使用 GCS REST API 完成 90% 的工作。 (Docs here.)

有几个不同之处。

  1. 在您通过 Firebase Storage SDK 访问之前,不会自动生成下载网址。
  2. 您将无法使用 Firebase 身份验证通过 GCS REST 端点上传。您需要设置 OAuth(您可能可以通过 Google 使用身份验证登录)或服务帐户。 (这里是 example 说明如何从 Node.js 向 GCS 进行身份验证。)

【讨论】:

    【解决方案2】:

    可以使用 REST API 将文档上传到 Firebase 存储。我已经在 Python 中使用 requests 库来设置 HTTP 标头并发出 POST 请求。该过程在其他语言或 cURL 中应该类似。

    无需授权即可上传:

    def firebase_upload():
    """
    Executes a POST request to upload an image to Firebase Storage.
    DEMONSTRATION ONLY, USE NO FURTHER!
    args: None
    returns: response (json) with the response to the request
    usage: res = firebase_upload()
    """
        response = None
    
        file2upload = "/Your/Path/To/your_pic.png"
        file_binary = open(file2upload, "rb").read()
    
        # HTTP
        url2file = 'https://firebasestorage.googleapis.com/v0/b/<your-project-ID.appspot.com>/o/stash%2Fyour_pic.png'
        headers = {"Content-Type": "image/png"}
    
        r = requests.post(url2file, data=file_binary, headers=headers)
        response = r.json()
    
        return response
    

    这会将图像上传到名为“stash”的文件夹中。请务必在 URL 中使用 %2F 而不是正斜杠。此外,您需要使用 Firebase 规则公开您的存储桶。成功的响应将返回如下 JSON:

    
        {'name': 'stash/your_pic.png',
        'bucket': '<your-project-ID>.appspot.com',
        'generation': '1608437408388390',
        'metageneration': '1',
        'contentType': 'image/png',
        'timeCreated': '2020-12-20T04:10:08.388Z',
        'updated': '2020-12-20T04:10:08.388Z',
        'storageClass': 'STANDARD',
        'size': '52628',
        'md5Hash': 'mmkqwEek6tMAZmvooQ9X7g==',
        'contentEncoding': 'identity',
        'contentDisposition': "inline; filename*=utf-8''your_pic.png",
        'crc32c': 'fhlSmw==',
        'etag': 'CKaq+6LY2+0CEAE=',
        'downloadTokens': '<secure_token>'}
    

    要使用身份验证上传,过程相同,只是您将身份验证令牌(使用用于身份验证的 REST 端点获得)与 HTTP 标头一起传递。像这样修改函数中的一行代码。

        headers = {"Content-Type": "image/png", "Authorization": "Bearer "+auth_token}
    

    下载 URL 是在 API 响应中添加了“downloadTokens”的 url2file。添加:'?alt=media&token=' 后跟令牌字符串。

    该示例展示了如何将图像添加到 Firebase 存储,并且可以通过调整此模式使用 REST API 执行所有 CRUD 操作。

    【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2020-11-26
    • 1970-01-01
    • 2019-09-06
    • 2019-08-02
    • 2021-08-16
    • 2016-10-15
    • 2022-01-12
    • 2021-11-30
    相关资源
    最近更新 更多