[파이썬] Flask의 파일 업로드 및 다운로드

Flask는 파이썬 웹 프레임워크로서 파일 업로드 및 다운로드 기능을 쉽게 구현할 수 있습니다. 파일 업로드를 통해 사용자는 서버로 파일을 전송하고, 파일 다운로드를 통해 서버는 사용자에게 파일을 제공할 수 있습니다. 이번 블로그 포스트에서는 Flask를 사용하여 파일 업로드와 다운로드 기능을 구현하는 방법을 알아보겠습니다.

1. 파일 업로드 구현

Flask에서 파일 업로드를 구현하기 위해서는 HTML의 <form> 요소와 enctype="multipart/form-data" 속성을 사용해야 합니다. 이렇게 설정하면 클라이언트가 서버로 파일을 전송할 수 있도록 해줍니다.

# app.py

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        # 파일 저장
        file.save(file.filename)
        return 'File uploaded successfully'
    return render_template('upload.html')

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

위의 코드에서는 / 경로로의 GET 요청이 들어오면 upload.html 템플릿 파일을 렌더링하고, POST 요청이 들어오면 업로드된 파일을 저장합니다. 업로드된 파일은 file 객체를 통해 접근할 수 있습니다.

<!-- upload.html -->

<!DOCTYPE html>
<html>
  <head>
    <title>File Upload</title>
  </head>
  <body>
    <h1>File Upload</h1>
    <form method="POST" action="/" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
  </body>
</html>

upload.html 파일은 파일 선택 및 업로드를 위한 HTML 폼을 정의하고 있습니다. 파일 선택하는 <input> 요소의 name 속성 값은 서버에서 사용하기 위해 지정해야 합니다.

2. 파일 다운로드 구현

파일 다운로드는 Flask에서 제공하는 send_file 함수를 사용하여 구현할 수 있습니다. send_file 함수는 파일을 사용자에게 전송하는 역할을 담당합니다.

# app.py

from flask import Flask, request, send_file

app = Flask(__name__)

@app.route('/download', methods=['GET'])
def download_file():
    # 다운로드할 파일 경로
    file_path = 'my_file.txt'
    return send_file(file_path, as_attachment=True)

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

위의 코드에서는 /download 경로로의 GET 요청이 들어오면 my_file.txt 파일을 다운로드합니다. as_attachment=True를 설정하여 파일을 첨부 파일로 다운로드할 수 있도록 합니다.

마무리

이제 Flask를 사용하여 파일 업로드와 다운로드 기능을 구현하는 방법에 대해 알아보았습니다. 이것은 Flask를 사용하여 간단하게 파일 처리를 수행하는 기초적인 예제이며, 실제로는 보안과 예외 처리 등 다양한 요소를 고려해야 합니다. Flask를 활용하여 더 다양한 파일 처리 기능을 구현해 보세요!