【问题标题】:Upload image received via Flask to Firebase Storage将通过 Flask 收到的图像上传到 Firebase 存储
【发布时间】:2017-09-11 20:33:45
【问题描述】:

我正在尝试将图像上传到 Firebase 存储。图像通过 HTTP Post 传递。使用 Flask 处理请求。我似乎无法正确上传图片。当我指定图片的位置时,我可以成功上传图片,排除 Firebase 或该代码的问题。我试图获取文件位置,但不幸的是,为了安全起见,Flask 阻止了这一点(可能是一件好事)。在存储图像之前我需要做些什么来处理图像吗?

我正在使用 Postman 发送 POST 请求。

@message_api.route('/messenger/message/send/picture/individual', methods=['POST'])
def send_individual_picture():
    picture = request.files['picture']

    firebase.storage().put(picture)

【问题讨论】:

  • request.files['picture'] 将成为 FileStorage 类型的包装类 - firebase.storage().put() 期望作为参数是什么?字节流?一条路?
  • 它需要文件路径位置。

标签: python python-2.7 firebase flask firebase-storage


【解决方案1】:

由于firebase.storage().put() 需要文件路径,因此您需要先将上传内容保存到文件中,然后才能存储。

现在你有这个:

@message_api.route('/messenger/message/send/picture/individual', methods=['POST'])
def send_individual_picture():
    picture = request.files['picture']

    firebase.storage().put(picture)

在此之后,picture 是 Werkzeug 的 Filestorage 类的一个实例,可以将其视为文件描述符。您可以从中执行read() 之类的操作。

由于您的代码确实将文件视为临时文件,并且之后您不需要它挂起,您可以使用 NamedTemporaryFile 创建一个带有名称的临时文件。之后您可以删除临时文件。

import os
import tempfile

@message_api.route('/messenger/message/send/picture/individual', methods=['POST'])
def send_individual_picture():
    picture = request.files['picture']

    temp = tempfile.NamedTemporaryFile(delete=False)
    picture.save(temp.name)
    firebase.storage().put(temp.name)

    # Clean-up temp image
    os.remove(temp.name)

【讨论】:

  • 感谢我能够保存图片并在上传后快速将其删除,效果很好!
猜你喜欢
  • 2020-09-08
  • 2021-01-20
  • 2017-09-25
  • 2018-10-24
  • 2019-01-22
相关资源
最近更新 更多