2017-09-11 113 views
0

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

我正在使用邮递员发送POST请求。

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

    firebase.storage().put(picture) 
+0

'request.files [ '画面']'将是一个包装类型的['FileStorage'](http://werkzeug.pocoo.org/docs/0.12/datastructures/#werkzeug。 datastructures.FileStorage) - firebase.storage()。put()'作为一个参数期待什么?一个字节流?一条路径? – birryree

+0

它期望文件路径位置。 – cfil360

回答

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) 
+0

谢谢我能够保存图像,并在上传后快速删除它,它完美的工作! – cfil360

相关问题