[파이썬] Flask에서 파일 업로드

Flask는 간편하고 유연한 웹 프레임워크로, 파일 업로드 기능을 쉽게 구현할 수 있습니다. 이번 포스트에서는 Flask에서 파일 업로드를 구현하는 방법에 대해 알아보겠습니다.

Flask 애플리케이션 설정

우선, Flask 애플리케이션의 설정에서 파일 업로드를 처리할 수 있도록 UPLOAD_FOLDER를 지정해야 합니다. 이 폴더는 업로드된 파일들을 저장할 위치입니다. 다음과 같이 app.config를 사용하여 설정을 할 수 있습니다.

from flask import Flask

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'

위의 코드에서 '/path/to/uploads'는 본인이 원하는 실제 경로로 수정해야 합니다.

파일 업로드를 위한 HTML 폼 작성

이제 파일을 업로드할 수 있는 HTML 폼을 작성해야 합니다. Flask에서는 flask.request.files를 사용하여 파일을 업로드할 수 있습니다. 다음은 파일을 업로드할 수 있는 기본 폼입니다.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>파일 업로드</title>
  </head>
  <body>
    <h1>파일 업로드</h1>
    <form action="/upload" method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="업로드">
    </form>
  </body>
</html>

위의 폼에서 action="/upload"은 파일 업로드를 처리할 경로를 지정해야 합니다.

파일 업로드를 처리하는 Flask 라우트

이제 파일 업로드를 처리하는 Flask 라우트를 작성해야 합니다. 라우트 함수 내에서 flask.request.files를 사용하여 업로드된 파일을 받아올 수 있습니다.

from flask import Flask, request, redirect, url_for
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'

@app.route('/')
def upload_form():
    return '''
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>파일 업로드</title>
      </head>
      <body>
        <h1>파일 업로드</h1>
        <form action="/upload" method="post" enctype="multipart/form-data">
          <input type="file" name="file">
          <input type="submit" value="업로드">
        </form>
      </body>
    </html>
    '''

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    return redirect(url_for('upload_form'))

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

위의 코드에서 /upload 경로로 POST 요청이 오면 해당 경로의 파일이 app.config['UPLOAD_FOLDER']에 저장됩니다. 이후 upload_form() 함수로 리다이렉트됩니다.

파일 업로드 테스트

위의 Flask 애플리케이션을 실행한 뒤, 웹 브라우저로 http://localhost:5000에 접속하면 파일 업로드 폼이 나타납니다. 파일을 선택하고 “업로드” 버튼을 클릭하면 파일이 서버로 업로드됩니다.

위의 예제에서는 업로드된 파일을 동일한 이름으로 저장합니다. 파일명을 중복으로 처리하거나, 업로드된 파일의 확장자를 확인하는 추가적인 로직을 구현하면 보안과 관련된 측면을 강화할 수 있습니다.

이렇게 Flask에서 파일 업로드를 구현할 수 있습니다. Flask의 간편한 구조와 다양한 기능을 활용하면 다양한 웹 어플리케이션을 개발할 수 있습니다.