[파이썬] web2py에서의 파일 업로드 및 다운로드

web2py는 파이썬 기반의 오픈 소스 웹 애플리케이션 프레임워크로, 파일 업로드 및 다운로드 기능을 쉽게 구현할 수 있습니다. 이번 블로그에서는 web2py에서 파일 업로드와 다운로드를 어떻게 처리하는지 알아보겠습니다.

파일 업로드

Web2py에서 파일 업로드를 구현하기 위해서는 다음과 같은 단계를 따르면 됩니다:

  1. form 객체를 생성하고 file 필드를 추가합니다.
  2. form 객체를 validate하고 유효성 검사를 수행합니다.
  3. 업로드된 파일을 지정된 디렉토리로 저장합니다.

아래는 파일 업로드를 보다 구체적으로 설명하기 위한 예제 코드입니다:

def upload_file():
    form = SQLFORM.factory(Field('file', 'upload', uploadfolder='uploads/'))
    
    if form.process().accepted:
        # 폼이 제출되면 업로드된 파일을 저장합니다.
        file = form.vars.file
        file.save('uploads/' + file.filename)
        return '파일이 성공적으로 업로드되었습니다.'
    elif form.errors:
        return '파일 업로드 중에 오류가 발생했습니다.'
    else:
        return dict(form=form)

위의 예제에서 uploadfolder 파라미터를 사용하여 업로드된 파일을 저장할 디렉토리를 지정할 수 있습니다. 이렇게 지정한 디렉토리에 파일이 저장되며, save() 함수를 통해 업로드된 파일의 원래 이름을 유지합니다.

파일 다운로드

파일 다운로드를 구현하는 방법은 상대적으로 간단합니다. 다음 단계를 따라서 구현할 수 있습니다:

  1. 다운로드할 파일의 경로 및 이름을 지정합니다.
  2. response.stream 객체를 사용하여 파일을 응답합니다.
  3. headers를 설정하여 파일 다운로드를 위한 헤더를 추가합니다.

아래는 파일 다운로드를 위한 예제 코드입니다:

def download_file():
    # 다운로드할 파일의 경로 및 이름을 지정합니다.
    file_path = 'uploads/example_file.txt'
  
    # 파일을 응답합니다.
    response.stream(file_path)
  
    # 파일 다운로드를 위한 헤더를 추가합니다.
    response.headers['Content-Disposition'] = 'attachment; filename=example_file.txt'

    return response

위의 코드에서 download_file() 함수는 사용자가 다운로드를 요청하면 업로드된 example_file.txt 파일을 반환합니다. response.stream() 함수는 파일을 응답으로 전송하고, response.headers를 사용하여 파일 다운로드를 위한 헤더를 추가합니다.

이제, web2py를 사용하여 파일 업로드 및 다운로드 기능을 쉽게 구현할 수 있게 되었습니다. 위의 예제 코드를 참고하여 웹 애플리케이션에 파일 업로드 및 다운로드 기능을 추가해보세요.