[python] 파일 업로드하기

파이썬을 사용하여 웹 애플리케이션을 개발하다보면 파일 업로드 기능이 필요한 경우가 종종 있습니다. 이번 포스트에서는 Python을 사용하여 파일을 업로드하는 방법을 알아보겠습니다.

Flask를 이용한 파일 업로드

Flask는 Python 웹 프레임워크로 유연하고 간편한 웹 애플리케이션 개발을 도와줍니다. Flask에서 파일 업로드 기능을 구현하기 위해서는 다음과 같은 단계를 따라야 합니다.

  1. Flask 모듈을 설치합니다.
  2. app.py 파일을 생성하고 아래의 코드를 추가합니다.
from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    file.save('uploads/' + file.filename)
    return '파일 업로드가 완료되었습니다.'

if __name__ == '__main__':
    app.run(debug=True)
  1. templates 폴더를 생성하고 index.html 파일을 생성합니다.
<!DOCTYPE html>
<html>
<head>
    <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>

위의 코드에서는 / 경로로 접속 시 index.html 파일을 렌더링하고, 파일 업로드를 처리하기 위한 /upload 경로가 있습니다. 파일 업로드를 위한 form 태그에서는 enctype="multipart/form-data" 속성을 반드시 추가해야 합니다.

  1. uploads 폴더를 생성합니다. 이 폴더는 업로드된 파일이 저장될 위치입니다.

  2. 터미널에서 다음 명령을 실행하여 애플리케이션을 실행합니다.

python app.py

Flask는 기본적으로 5000번 포트를 사용하므로 http://localhost:5000으로 접속하여 파일 업로드 기능을 테스트할 수 있습니다.

Django를 이용한 파일 업로드

Django 역시 많은 개발자들이 사용하는 Python 웹 프레임워크입니다. Django에서 파일 업로드 기능을 구현하기 위해서는 다음과 같은 단계를 따라야 합니다.

  1. Django 모듈을 설치합니다.
  2. django_project 폴더를 생성합니다.

  3. 터미널에서 다음 명령을 실행하여 Django 프로젝트를 생성합니다.
django-admin startproject myproject
  1. myproject 폴더로 이동한 후, 다음 명령을 실행하여 앱을 생성합니다.
python manage.py startapp myapp
  1. settings.py 파일을 열고 INSTALLED_APPS 변수에 'myapp'을 추가합니다.

  2. myapp 폴더 안에 views.py 파일을 생성하고 아래의 코드를 추가합니다.

from django.shortcuts import render
from django.http import HttpResponse

def home(request):
    return render(request, 'index.html')

def upload(request):
    if request.method == 'POST':
        file = request.FILES['file']
        with open('uploads/' + file.name, 'wb+') as destination:
            for chunk in file.chunks():
                destination.write(chunk)
        return HttpResponse('파일 업로드가 완료되었습니다.')
  1. myapp 폴더 안에 urls.py 파일을 생성하고 아래의 코드를 추가합니다.
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('upload', views.upload, name='upload'),
]
  1. templates 폴더를 생성하고 index.html 파일을 생성합니다.

<!DOCTYPE html>
<html>
<head>
    <title>파일 업로드</title>
</head>
<body>
    <h1>파일 업로드</h>
    <form action="{% url 'upload' %}" method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="file">
        <input type="submit" value="업로드">
    </form>
</body>
</html>

Django에서는 {% url 'upload' %}를 이용하여 URL을 생성하고, CSRF(Cross Site Request Forgery) 토큰을 보호하기 위해 {% csrf_token %}을 사용합니다.

  1. uploads 폴더를 생성합니다. 이 폴더는 업로드된 파일이 저장될 위치입니다.

  2. 터미널에서 myproject 폴더로 이동한 후, 다음 명령을 실행하여 개발 서버를 실행합니다.

python manage.py runserver

Django는 기본적으로 8000번 포트를 사용하므로 http://localhost:8000으로 접속하여 파일 업로드 기능을 테스트할 수 있습니다.

마무리

이번 포스트에서는 Flask와 Django를 사용하여 Python에서 파일 업로드 기능을 구현하는 방법을 알아보았습니다. 파일 업로드는 많은 웹 애플리케이션에서 필수적으로 사용되는 기능이므로, 이러한 기능을 습득하는 것은 개발자로서 중요한 부분입니다. 많은 연습과 테스트를 통해 파일 업로드 기능을 익히시길 바랍니다.

참고자료