티스토리 뷰

반응형

 

플라스크에서 파일 업로드를 처리하는 것은 굉장히 쉽다. enctype 속성을 "multipart/form-data" 로 설정한 HTML 양식을 필요로 한다. URL핸들러는 request.files[] 객체에서 파일을 가져와 원하는 위치에 저장한다. 업로드 된 파일은 실제로 최종 위치에 저장되기 전 서버의 임시 위치에 저장이 된다. 대상 파일의 이름은 하드코딩 되거나 request.files[file] 객체의 filename 속성에서 가져올 수 있지만, secure_filename() 함수를 이용하여 보안처리를 해주는 것이 좋다.

 

파일명 : 13_upload.html

<html>
    <body>
        <form action="http://localhost:5000/uploader"
            method="POST"
            enctype="multipart/form-data">
            <input type="file" name="file" />
            <input type="submit" />
        </form>
    </body>
</html>

enctype 속성을 multipart/form-data 로 가진 심플한 html 이다. 

 

파일명 : 13_file_uploading.py

from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
app = Flask(__name__)

@app.route('/upload')
def upload_file():
    return render_template('13_upload.html')

@app.route('/uploader', methods=['GET', 'POST'])
def uploader_file():
    if request.method == 'POST':
        f = request.files['file']
        f.save(secure_filename(f.filename))
        return 'file uploaded successfully'

if __name__ == '__main__':
    app.run(debug=True)

request.files[] 객체에서 파일을 가져와 secure_filename() 함수를 이용하여 파일명을 암호화 한 후 임시 위치에 저장한 후, 최종적으로 기본 위치에 파일을 저장한다.

 

파일선택을 클릭하여 서버에 업로드 할 파일을 선택하고 제출을 클릭

 

테스트를 위해 UPLOAD_TEST.txt 라는 파일을 생성하고 선택했다.

 

제출버튼을 클릭하면 파일이 성공적으로 업로드 되었다는 메세지가 출력된다.

 

파일 업로드가 정상으로 처리 되었으며, 파일 내용도 이상 없다.

 

반응형

'IT > Flask' 카테고리의 다른 글

[Flask] WTF (Flask-WTF)  (0) 2020.09.09
[Flask] 메일발송 (Mail)  (0) 2020.09.05
[Flask] 메세지 플래싱 (Message Flashing)  (0) 2020.08.14
[Flask] 리다이렉트 & 에러 (Redirect & errors)  (0) 2020.08.13
[Flask] 세션 (Sessions)  (0) 2020.08.12
댓글
공지사항