将通过Flask收到的图片上传到Firebase存储
问题描述:
我试图将图片上传到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)
答
由于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
'request.files [ '画面']'将是一个包装类型的['FileStorage'](http://werkzeug.pocoo.org/docs/0.12/datastructures/#werkzeug。 datastructures.FileStorage) - firebase.storage()。put()'作为一个参数期待什么?一个字节流?一条路径? – birryree
它期望文件路径位置。 – cfil360