파이썬(Python) Flask - File upload
오늘은 파이썬 Django(장고)와 더불어 대표적인 웹 프레임워크인 Flask 에서 가장 빈번하게 질문이
올라오는 파일 업로드 사용법에 대해서 알아보겠습니다.
설치 시에 대부분의 기능을 지원하는 중량 프레임워크인 Django에 비해서 Flask는 아무것도 없는 초기
기본 레이아웃 형태로 설치가 지원되고 있습니다.
Flask는 매우 가볍고 심플하고 경량화를 추구하는 철학때문에 필요한 패키지들을 별도로 사용자가
설치하거나 직접 개발해서 사용해야 합니다.
쉽게 이야기 하면 많은 곳에서 활용하고 있는 자유도가 대단히 높은 프레임워크라고 볼 수 있습니다.
그러면 문서 하단에서 간단하게 예제를 작성해보겠습니다.
Flask 관련 포스팅 : Flask 관련
Flask 관련 포스팅 : Flask 관련
파이썬(Python) Flask - 파일 업로드 예제 소스
플라스크 파일 업로드 기능 구현을 위해서 upload.html 파일을 플라스크에서 template 렌더링 후 선택한
파일을 지정한 경로로 업로드 해보는 예제 소스 입니다.
upload.html
123456789 <html> <body> <form action = "http://localhost:5000/fileUpload" method = "POST" enctype = "multipart/form-data"> <input type = "file" name = "file" /> <input type = "submit"/> </form> </body></html> cs
- 3번 라인 : html form 태그 사용 -> enctype -> multipart/form-data 확인
- 6번 라인 : form submit 적용
1 2 3 4 5 6 7 8 9 | <html> <body> <form action = "http://localhost:5000/fileUpload" method = "POST" enctype = "multipart/form-data"> <input type = "file" name = "file" /> <input type = "submit"/> </form> </body> </html> | cs |
- 3번 라인 : html form 태그 사용 -> enctype -> multipart/form-data 확인
- 6번 라인 : form submit 적용
flask_upload.py
flask_upload.py
123456789101112131415161718192021 from flask import Flask, render_template, requestfrom werkzeug import secure_filenameapp = Flask(__name__) #업로드 HTML 렌더링@app.route('/upload')def render_file(): return render_template('upload.html') #파일 업로드 처리@app.route('/fileUpload', methods = ['GET', 'POST'])def upload_file(): if request.method == 'POST': f = request.files['file'] #저장할 경로 + 파일명 f.save(secure_filename(f.filename)) return 'uploads 디렉토리 -> 파일 업로드 성공!' if __name__ == '__main__': #서버 실행 app.run(debug = True) cs
- 1,2번 라인 : flask 및 관련 패키지 import
- 3번 라인 : Flask 객체(인스턴스) app 할당- 7번 라인 : 브라우저 주소창에 /upload 요청 시에 upload.html 렌더링 하는 함수 선언- 12번 라인 : upload.html 에서 form submit 시에 request 된 파일 데이터를 처리하는 함수
- 21번 라인 : 서버 실행(디버그 모드 True)- 기본적으로 Root 디렉토리에 Templates 폴더 및 upload 폴더 생성 필요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from flask import Flask, render_template, request from werkzeug import secure_filename app = Flask(__name__) #업로드 HTML 렌더링 @app.route('/upload') def render_file(): return render_template('upload.html') #파일 업로드 처리 @app.route('/fileUpload', methods = ['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] #저장할 경로 + 파일명 f.save(secure_filename(f.filename)) return 'uploads 디렉토리 -> 파일 업로드 성공!' if __name__ == '__main__': #서버 실행 app.run(debug = True) | cs |
- 1,2번 라인 : flask 및 관련 패키지 import
- 3번 라인 : Flask 객체(인스턴스) app 할당
Flask File Upload의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Flask File Upload의 추가적인 상세 설명은 이 곳을 참고해 주세요.
파이썬(Python) Flask - 파일 업로드 실행 화면
아래 이미지로 프로젝트 폴더 구조(확인 중요) 및 실제 실행 화면을 확인하실 수 있습니다.
실제 실행 화면
Flask 공식 Reference : Flask 관련
Flask 공식 Reference : Flask 관련
마무리
이번 포스팅에서는 파이썬 플라스크 프레임워크를 활용해서 간단한 파일 업로드 테스트를 진행했습니다.
경량화를 추구하는 마이크로 프레임워크인 플라스크는 프로젝트가 진행 될 수록 단점이 두드러지는 경향이
있습니다. 검증되지 않은 많은 패키지를 설치하는 것도 원인이 될 수 있겠습니다.
하지만, 직관적이고 생산성이 가장 높은 언어로 생각되는 파이썬 플라스크를 활용해서 아주 빠르게
원하는 웹 페이지를 작성하고 나아가 웹 어플리케이션을 편하게 제작할 수 있는 큰 장점이 있습니다.
첨부된 소스코드를 다운받아서 반드시 한 번 실행 해보시는 것을 추천드립니다.
다음 시간에도 플라스크(Flask)의 다양한 기능 및 도움이 되는 기능을 포스팅 하도록 하겠습니다.
소스코드 다운로드 : flask_upload.zip
'웹 백엔드 > Django & Flask' 카테고리의 다른 글
Django(장고) - 로깅(Logging) 설정 및 DB SQL 쿼리(Query) 확인 (0) | 2019.02.14 |
---|---|
Flask(플라스크) - 파이썬 Flask 기본 템플릿(template) 예제 및 소스파일 (1) | 2018.06.22 |
Flask(플라스크) - 파이썬 Flask RestFul API 서버 작성 예제 및 다운로드 (0) | 2018.01.21 |
Django(장고) - 로깅(Logging) 설정 및 로그(Log)파일로 저장 (0) | 2017.10.09 |
Django(장고) - 에러 페이지 처리(커스터마이징 404, 500 외) (1) | 2017.09.08 |