2017-09-11 32 views
0

イメージをFirebaseストレージにアップロードしようとしています。イメージはHTTP Post経由で渡されます。要求はFlaskを使用して処理されます。画像を正しくアップロードできないようです。イメージの場所を指定すると、イメージを正常にアップロードでき、Firebaseまたはそのコードの問題を排除できます。私はファイルの場所を取得しようとしましたが、残念ながらFlaskは安全のためにこれを防ぐことができました(たぶん良いことです)。イメージを保存する前にイメージを処理する必要がありますか?Flask to Firebase Storageにアップロードされた画像をアップロードします。

私はPostmanを使用して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 [ 'ピクチャは']' http://werkzeug.pocoo.org/docs/0.12/datastructures/#werkzeug([ 'FileStorage']タイプのラッパークラスになるだろう。 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

関連する問題