将通过Flask收到的图像上传到Firebase存储

时间:2017-09-11 20:33:46

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

我正在尝试将图片上传到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)

1 个答案:

答案 0 :(得分: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)