最近、プログラミングとブログの時間があまりとれなくて、十分に調べられていません。今回のコードと説明はかなり短く、備忘録として書いています。
もくじ
ファイルの階層
├── app.py
└── templates
└── upload.html
templates
upload.html
ファイルをアップロードするには、formタグ内にenctype="multipart/form-data"
が必要
app.py
app.py
from flask import Flask, render_template, request, session
from werkzeug.utils import secure_filename
import os
import tempfile
app = Flask(__name__)
# flaskでsessionを使うには、SECRET_KEYが必要
app.config.from_mapping(
SECRET_KEY = 'dev'
)
@app.route('/')
def index():
# 一時ディレクトリを作成
# ルーティングで使えるように、sessionに一時ディレクトリのpathを代入
session['tmpdir'] = tempfile.mkdtemp()
return render_template('upload.html')
@app.route('/upload', methods=['POST'])
def upload():
# アップロードされたファイルを代入
file = request.files['uploadfile']
# ファイル名をsecureな名前に
file_name = secure_filename(file.filename)
# 一時ディレクトリに保存
file.save(os.path.join(session['tmpdir'], file_name))
return '<h1>Complete</h1>'
if __name__ == '__main__':
app.run(debug=True)
一時ディレクトリを削除
import shutil
shutil.rmtree(session['tmpdir'])
tempfile.mkdtemp()では、一時ディレクトリは自動で削除されないので、ルーティングのどこかで一時ディレクトリを削除するコードをいれます。
一時ファイル(ディレクトリ)の作成
一時ファイルやディレクトリを作成できるtempfileモジュールには、複数種類があるようです。少し触った感じだと、Flaskでファイルをアップロードするには、手動削除の方が使いやすいのかな?まだ、よくわかっていません。
作成先の確認
tempfile.gettempdir()
自動削除
- ファイル
tempfile.TemporaryFile()
tempfile.NamedTemporaryFile()
- ディレクトリ
tempfile.TemporaryDirectory()
手動削除
- ファイル
tempfile.mkstemp()
- ディレクトリ
tempfile.mkdtemp()