[파이썬] 웹 프레임워크를 이용한 파일 업로드 및 다운로드

업로드와 다운로드 기능은 웹 어플리케이션에서 매우 중요한 기능 중 하나입니다. 웹 프레임워크를 사용하면 파일을 업로드하고 다운로드하는 과정을 간단하게 구현할 수 있습니다. 이번 블로그 포스트에서는 Python 웹 프레임워크를 사용하여 파일 업로드 및 다운로드를 구현하는 방법을 소개하겠습니다.

파일 업로드

파일 업로드는 사용자가 웹 어플리케이션에 파일을 선택하고 서버로 전송하는 과정입니다. 파이썬의 웹 프레임워크 중 하나인 Flask를 사용하여 파일 업로드를 구현해 보겠습니다.

먼저, Flask를 설치해야 합니다. 터미널에서 다음 명령을 실행하여 Flask를 설치합니다.

pip install flask

다음으로, Flask를 사용하여 파일 업로드 기능을 구현할 예제 코드입니다.

from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename

app = Flask(__name__)

# 업로드 파일이 저장될 경로를 설정합니다.
UPLOAD_FOLDER = '/path/to/uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 허용할 파일 확장자를 설정합니다.
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

# 허용되는 파일 확장자인지 확인하는 함수를 작성합니다.
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        # 파일이 전송되었는지 확인합니다.
        if 'file' not in request.files:
            return redirect(request.url)

        file = request.files['file']

        # 파일이 비어있는지 확인합니다.
        if file.filename == '':
            return redirect(request.url)

        # 허용되는 파일 확장자인지 확인합니다.
        if allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return '파일이 성공적으로 업로드되었습니다.'

    return '''
    <!doctype html>
    <title>파일 업로드</title>
    <h1>파일 업로드</h1>
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="업로드">
    </form>
    '''

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

위 코드에서 주요한 부분은 다음과 같습니다.

위 예제 코드를 실행하면 파일을 선택하고 “업로드” 버튼을 누르면 서버로 파일이 업로드됩니다.

파일 다운로드

파일 다운로드는 웹 어플리케이션에서 서버에 저장된 파일을 사용자에게 제공하는 과정입니다. Flask를 사용하여 파일 다운로드 기능을 구현할 예제 코드입니다.

from flask import Flask, send_from_directory

app = Flask(__name__)

# 다운로드 파일이 저장된 경로를 설정합니다.
DOWNLOAD_FOLDER = '/path/to/downloads'

@app.route('/download/<filename>', methods=['GET'])
def download_file(filename):
    return send_from_directory(app.config['DOWNLOAD_FOLDER'],
                               filename, as_attachment=True)

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

위 코드에서 주요한 부분은 다음과 같습니다.

위 예제 코드를 실행하고 브라우저에서 /download/filename으로 접속하면 해당 파일이 다운로드됩니다.

결론

이번 블로그 포스트에서는 웹 프레임워크를 사용하여 파일 업로드 및 다운로드 기능을 구현하는 방법을 소개했습니다. Python의 Flask를 예시로 들었지만, 다른 웹 프레임워크를 사용하여도 비슷한 방식으로 구현할 수 있습니다. 파일 업로드 및 다운로드 기능은 다양한 웹 어플리케이션에서 필수적으로 사용되는 기능이므로, 웹 개발자에게 유용한 정보가 되었기를 바랍니다.