[파이썬] aiohttp 파일 업로드 및 다운로드 처리하기

파일 업로드 및 다운로드는 웹 애플리케이션에서 자주 사용되는 기능입니다. 이번 포스트에서는 aiohttp를 사용하여 Python으로 파일 업로드 및 다운로드를 처리하는 방법을 살펴보겠습니다.

aiohttp란?

aiohttp는 Python으로 비동기식 웹 애플리케이션을 개발하기 위한 빠르고 간단한 웹 프레임워크입니다. aiohttp는 asyncio를 기반으로 한 처리를 지원하며, HTTP 요청 및 응답을 처리하기 위한 다양한 기능을 제공합니다.

파일 업로드 처리하기

파일 업로드를 처리하기 위해 aiohttp에서는 aiohttp.web.FileFieldStorage 클래스를 사용합니다. 다음은 파일을 업로드하는 예제 코드입니다.

from aiohttp import web

async def handle_upload(request):
    reader = await request.multipart()
    field = await reader.next()

    if field.filename:
        filename = field.filename
        data = await field.read()

        with open(filename, 'wb') as f:
            f.write(data)

        return web.Response(text=f'{filename} 업로드 완료')
    else:
        return web.Response(text='파일 업로드 실패')

app = web.Application()
app.router.add_post('/upload', handle_upload)

web.run_app(app)

위 코드에서는 /upload 경로로 POST 요청을 받아 파일을 업로드합니다. request.multipart() 메서드를 사용하여 멀티파트 요청을 파싱하고, reader.next() 메서드를 사용하여 첫 번째 필드를 가져옵니다. 파일 필드인 경우, filename 속성과 read() 메서드를 사용하여 파일을 읽고 저장합니다. 파일 업로드가 성공한 경우, 업로드된 파일 이름을 응답으로 반환합니다.

파일 다운로드 처리하기

파일 다운로드를 처리하기 위해 aiohttp에서는 aiohttp.web.FileResponse 클래스를 사용합니다. 다음은 파일을 다운로드하는 예제 코드입니다.

from aiohttp import web

async def handle_download(request):
    file_path = '/path/to/file'

    return web.FileResponse(file_path)

app = web.Application()
app.router.add_get('/download', handle_download)

web.run_app(app)

위 코드에서는 /download 경로로 GET 요청을 받아 지정된 파일을 다운로드합니다. web.FileResponse 클래스를 사용하여 파일을 응답으로 반환합니다. file_path 변수에는 다운로드할 파일의 경로를 지정해야 합니다.

결론

aiohttp를 사용하여 파일 업로드 및 다운로드를 처리하는 방법에 대해 알아보았습니다. 이러한 기능은 웹 애플리케이션에서 필수적이며, aiohttp를 통해 간단하고 효율적으로 처리할 수 있습니다. aiohttp의 다양한 기능과 함께 파일 처리를 구현하여 더욱 강력한 웹 애플리케이션을 개발해보세요.