Python flask에서 파일을 업로드 할 경우 하나가 아닌 다수(multiple upload)라면 어떻게  해야할까요? 클라이언트측 html과 서버측 python 코드를 아래에서 알아보겠습니다.



# Python flask에서 여러 파일 전송, 전달받기

아래 예제를 통하여 html과 python 코드를 예제를 통해 알아봅니다. 먼저 파일을 전송하기 위해 간단한 입력폼이 필요합니다.


@ upload.html
<form method="POST" enctype="multipart/form-data" action="/uploadfile/">
  <input type="file" name="file[]" multiple="">
  <button type="submit">Submit</button>
</form>

이때 중요한 부분은 form 태그의 속성으로 enctype을 추가합니다.
<form method="POST" enctype="multipart/form-data" action="/uploadfile/">

그 다음으로 파일을 선택할 수 있도록 input 태그를 추가하되 input 태그에 multiple 속성과 name 속성을 추가합니다. 이때 name은 배열로 선언하여 여러개의 파일을 전달할 수 있도록합니다.

name="file[]"
multiple


html 코드는 이걸로 모두 끝났습니다. 버튼을 클릭하면 첨부된 파일이 서버에 함께 요청됩니다. 그럼 아래는 Python 코드로 전달한 파일을 받아 변수에 저장하는 방법입니다.



! Python 파일 멀티 업로드 예제 만들기이번에는 Python에서는 간단하게 입력폼의 파일만 받도록 코드를 작성해야합니다. 먼저 라우팅을 설정해 해당 url로 POST로 접근시 함수를 실행하게합니다. 아래 예제는 Python의 flask 프레임워크를 사용하여 예제를 작성하였습니다.
from flask import request

@app.route("/uploadfile/", methods=["POST"])
def upload_file():
    files = request.files.getlist("file[]")
    return ""

위에 보시는 것 처럼  /uploadfile/이라는 url 주소로 파일을 보내면 변수 files에 값을 받는데 이때 flask 모듈의 request에서 해당 기능을 수행합니다. 즉 전달된 파일은 request 모듈의 files에 저장됩니다. 이를 다시보면 ..
uploadedFiles = request.files.getlist("file[]")

getlist() 메소드를 사용하여 전달받은 파일을 변수 uploadedFiles로 저장하도록 하였습니다. 또한 file뒤에도 배열을 표시하는 []가 추가됩니다.
for fil in uploadedFiles:
  ## Do Something

이제 반복문을 사용하여 파일을 서버에 저장하거나 DB에 파일 정보를 저장하는 등의 작업이 가능합니다.


! 주의할 점앞에도 언급한 듯이 서버에서 배열로 전달받기 위해서는 html 입력폼에서 배열로 값을 전달해야합니다. 즉 input태그의 name 속성값의 뒤에 중괄호가 필요하니 꼭 추가하도록 합니다.

여기까지 멀티 업로드를 위한 방법을 알아봤습니다. 이제 파일 전송시 여러개를 보내서 전달 받을 수 있게되었습니다.