LoginSignup
0
0

More than 1 year has passed since last update.

Flaskでファイルのダウンロード・アップロードを実装してみた

Last updated at Posted at 2022-09-13

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0