개발/PYTHON

파이썬 플라스크 멀티파일업로드 Python flask MultiFileUploads

Aireee 2021. 2. 25. 05:12
300x250
반응형

엑셀문서를 재가공하는 프로그램을 만들었다가, 웹서비스로 만들면 좋겠다는 생각이 들어서 오랜만에 다시 플라스크(flask)를 공부하기 시작하고 있다. 겸사겸사, 포스팅도 다시 하기 시작하는 중. 

한동안 아에 만지지도 않아서 그런지 방법이 가물가물.. 

그래도 한번 해봤던 거라 그런지 손쉽게 적응을 시작하고 있다. 

우선 멀티파일 업로드를 위한 예제를 작성해보자. 소스 작성은 app.py 이라고 지정했다.

app.py

from flask import Flask, render_template, request
import os

app = Flask(__name__)

@app.route('/')
def index():
	return render_template('index.html')
    
@app.route('/multiFileUploads', methods = ['POST']
def multi_upload_file():
	if request.mothod == 'POST':
		upload = request.files.getlist("file[]")
		for f in upload:
			f.save('./uploads/' + f.filename)
		return render_template('check.html')
 
if __name__ == '__main__':
	app.run()

파일 업로드를 위한 폼은 index.html 에 작성하기로 하고, 파일업로드 결과창은 'check.html' 로 작성한다고 가정한다. 사실 check.html 은 그냥 출력되는 아무 페이지이므로 이 포스팅에서 딱히 언급하지는 않겠다. 그리고 index.html 파일에 작성하는 form 구문은 php 등에서 사용하는 form 구조와 동일하지만, 혹시나 필요하다고 여길 사람이 있을 수도 있다고 생각하므로 예시는 아래에 꼭필요한 부분만 작성한다

index.html

<form action = "{{ url_for('multi_upload_file')}}" method='post' enctype='multipart/form-data'>
	<input type='file' name='file[]' multiple='multiple'>
	<input type='submit'>
</form>

 

index.html 파일 첫줄에 url_for('multi_upload_file') 이라고 작성된 부분이 보일 것이다. app.py 파일 안의 함수 multi_upload_file 로 form 에 작성된 데이터 (여기서는 다중파일)를 전달하라는 명령이다. 

이제 app.py 파일로 돌아와서 def multi_upload_file(): 아래 내용을 보면. 

if request.method == 'POST" 는 form 에서 POST 형식으로 넘어온 데이터가 있다면 아래를 실행하라는 명령이고

upload = request.files.getlist("file[]") 라는 명령어를 주면 file[] 에 들어온 데이터를 순서대로 upload 파일 안에 리스트 형식으로 들어간다. 그리고 저장할 때에도 파일을 하나하나 저장해야 하므로, 파일 저장 전 반복문이 필요해진다

for f in upload: 는 upload 라는 변수안에 저장된 여러개의 file 을 f 에 순차적으로 저장하는 것을 의미합니다. 그리고 f.save('./uploads/multi1.html') 은 multi1.html 이라는 이름으로 파일들이 저장된다. 

 

반응형