2017-09-11 110 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

相關問題