[python] Requests 라이브러리를 이용해 파일 업로드 진행 상태를 표시하는 방법은?

먼저, 파일을 업로드하기 전에 파일의 크기를 확인해야 합니다. 이를 위해 os 라이브러리를 import하여 파일의 크기를 구할 수 있습니다.

import os

file_path = '파일 경로'  # 업로드할 파일의 경로
file_size = os.path.getsize(file_path)  # 파일의 크기를 바이트 단위로 가져옴

다음으로, 파일을 분할하여 일부분씩 업로드하면서 업로드 진행 상태를 표시할 수 있습니다. 이를 위해 파일을 청크(chunk) 단위로 나눠 업로드해야 합니다. 예를 들어, 한 번에 1MB씩 청크로 나눈다고 가정해봅시다.

import requests

chunk_size = 1024 * 1024  # 한 번에 업로드할 청크의 크기 (1MB)

# 업로드 진행 상태를 표시하는 콜백 함수 정의
def progress_callback(chunk_number, chunk_size, total_size):
    uploaded = min(chunk_number * chunk_size, total_size)
    print(f'Uploaded {uploaded} bytes / {total_size} bytes')

# 파일 업로드 요청
with open(file_path, 'rb') as file:
    response = requests.post('업로드 URL', data=file, headers={'Content-Type': 'multipart/form-data'}, stream=True,
                             callback=lambda r: progress_callback(r.raw.tell(), chunk_size, file_size))

위 코드에서 progress_callback 함수는 업로드 진행 상태를 표시하기 위한 콜백 함수로, 현재 업로드된 바이트 수와 전체 파일 크기를 인자로 받아 업로드 상태를 출력하고 있습니다. requests.post 메서드에는 stream=True 옵션을 추가해야 파일 스트림을 분할하여 업로드할 수 있습니다.

이 방법을 사용하면 파일 업로드 진행 상태를 확인할 수 있습니다. 注意한 점은 이 코드는 업로드된 청크수를 기준으로 진행 상태를 표시하기 때문에 업로드된 청크수와 실제 업로드 진행 비율이 다를 수 있다는 점입니다.