Flaskでファイルのやり取りができる方法を調べてみたので、忘れないようにメモを残します。
ファイルのダウンロード
下のプログラムは、クライアントでのブラウザのURL欄にhttp://[サーバのIPアドレス]/xxx.bin
と入れると、サーバにあるyyy.bin
というファイルをダウンロードし、クライアント上にzzz.bin
という名前で保存する、という動作を行います。
ファイル構成
.
├── download.py
└── yyy.bin
download.py
from flask import Flask,send_file
app = Flask(__name__)
@app.route("/xxx.bin",methods=["GET"])
def download():
return send_file("./yyy.bin",mimetype="application/octet-stream",as_attachment=False,download_name="zzz.bin")
if __name__ == "__main__":
app.run(host="[サーバのIPアドレス]",debug=False,port=80)
下のコマンドで動作確認をします。
curl http://[サーバのIPアドレス]/xxx.bin -O
※補足説明
curlだとzzz.bin
ではなくxxx.bin
という名前で保存されました。しかし、chromeではちゃんとzzz.bin
という名前で保存されました。
ファイルのアップロード
下のプログラムは、http://[サーバのIPアドレス]/xxx
にname属性をyyy
としてzzz.bin
をPOSTすると、upload.py
と同じフォルダにzzz.bin
が保存される、という動作を行います。
upload.py
from flask import Flask,request
app = Flask(__name__)
@app.route("/xxx",methods=["POST"])
def upload():
name = "yyy"
if name in request.files:
fs = request.files[name]
fs.save("./"+fs.filename)
return "ok"
else:
return "ng"
if __name__ == "__main__":
app.run(host="[サーバのIPアドレス]",debug=False,port=80)
下のコマンドで動作確認をします。
curl http://[サーバのIPアドレス]/xxx -X POST -F yyy=@zzz.bin