[python] Flask-WTF에서 파일 업로드 시 파일 크기 제한을 설정하는 방법은 어떻게 되나요?
- Flask-WTF 설치하기
먼저, Flask-WTF 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다.
pip install Flask-WTF
- 파일 업로드 폼 만들기
플라스크 애플리케이션에서 파일 업로드를 위한 폼을 생성합니다. 예를 들어, 다음과 같은 HTML 폼을 사용할 수 있습니다.
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
- 파일 크기 제한 설정하기
Flask-WTF에서 파일 업로드 시 파일 크기 제한을 설정하기 위해 FileAllowed
밸리데이터를 사용할 수 있습니다.
from flask_wtf.file import FileField, FileAllowed
from wtforms import SubmitField
from flask_wtf import FlaskForm
class UploadForm(FlaskForm):
file = FileField(validators=[FileAllowed(['jpg', 'png']), 'File size exceeds the limit'])
submit = SubmitField('Upload')
위의 코드에서 FileAllowed
밸리데이터는 허용되는 파일의 확장명을 리스트로 전달받으며, FileField
에 사용되었습니다. 또한, 파일 크기 제한을 초과했을 때의 오류 메시지도 설정할 수 있습니다.
- 업로드 파일 처리하기
플라스크 애플리케이션에서 파일 업로드를 처리하기 위한 뷰 함수를 작성합니다. 아래 예제는 업로드된 파일을 저장하는 예제입니다.
from flask import Flask, render_template, redirect, request
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
@app.route('/', methods=['GET', 'POST'])
def upload_file():
form = UploadForm()
if request.method == 'POST' and form.validate_on_submit():
file = form.file.data
file.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(file.filename)))
return redirect('/')
return render_template('index.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
위의 코드에서 UPLOAD_FOLDER
변수를 사용하여 업로드된 파일이 저장될 폴더를 지정할 수 있습니다. file.save()
메서드를 사용하여 파일을 저장합니다. secure_filename
함수를 사용하여 파일 이름에 악의적인 코드가 포함되지 않도록 보안 처리합니다.
이제 Flask-WTF를 사용하여 파일 업로드 시 파일 크기 제한을 설정할 수 있습니다. 파일 크기 제한을 초과하면 오류 메시지가 표시되며 파일이 업로드되지 않습니다.