2017-12-08 5 views
1

割り当てのためにフラスコまたはdjangoをバックエンドとして使用する必要があります。私はそれに取り組んでいて、ほとんど終わったが、私が本当に取り組むことができない問題に走っている。私はユーザーにURLまたはアップロードのいずれかを介して写真をウェブサイトに提出させる。私は画像にいくつかのものを行い、再度画像を表示したいと思う。しかし、ユーザーが画像が表示されているページを閉じると、私の画像はサーバーから自動的に削除されます。フラスコ(python)で一度htmlページにファイルを提供するための最良の方法

私は一時ファイルを作ることを考えていましたが、ファイルを閉じた後で、これらを集めたものだけが削除されます。しかし、私はフラスコで最初にテンプレートを返さなければならないので、最初は本当に閉じることができません。これに接近する最善の方法は何でしょうか?

答えて

0

ファイルを受け取ったユーザーは、ファイルを安全に削除することができ、それでもブラウザに保存されます。関数から戻った後は削除できないので、変数でメモリにロードしてからファイルを削除し、ロードしたイメージを返す必要があります。この例では、次のようになります。

from flask import Flask, send_file 
import io 
import os 
app = Flask(__name__) 

@app.route("/image-route.jpg") # Change this to match your route 
def send_my_image(): 
    image_in_memory = None # Create variable so it has the correct scope 
    # Open file and load it into a BytesIO object which behaves just as if it was a file 
    with open('my-file-location.jpg', 'rb') as f: 
     image_in_memory = io.BytesIO(f.read()) 
    # Since we have the image in memory, we can safely remove it 
    os.remove('my-file-location.jpg') 
    # Finally, return our BytesIO object as if it was a file 
    return send_file(image_in_memory, attachment_filename='my-file.jpg') 

app.run() 
+0

しかし、私はreturn文の後にどのようにしていますか?それは、私がhtmlページにすべての変数などを送信しているので、私の関数が停止し、htmlページからhtmlを削除できないためです。私はpilイメージオブジェクトを開くことを追加しようとしましたが、それは動作しません.. –

+0

@RubenBrinkman例の更新された答えをご覧ください。 –

+0

ああそうです!しかし、ここから私のテンプレートの1つにこの画像を実際に表示する最良の方法は何でしょうか?元の画像の隣にいくつか余分な情報を与える必要があるからです。 –

関連する問題