Python은 비디오 파일 업로드를 조각으로 구현합니다.

멀티파트 업로드는 업로드를 위해 대용량 파일을 여러 개의 작은 청크로 분할하는 기술입니다. 이 기술은 전체 파일을 한 번에 서버에 업로드하지 않아도 되므로 업로드의 효율성과 안정성이 향상됩니다.

다음은 Python을 사용하여 멀티파트 업로드를 구현하는 기본 단계입니다.

업로드할 파일을 여러 개의 작은 블록으로 나누고 각 작은 블록의 MD5 값을 계산합니다.
HTTP 프로토콜을 통해 각 작은 블록이 서버에 업로드되고 업로드된 작은 블록의 정보(예: 블록 번호, 블록 크기, MD5 값 등)가 기록됩니다.
클라이언트 측에서 HTTP 프로토콜을 통해 서버에 모든 작은 블록의 스플라이싱 요청을 보내고 모든 작은 블록의 MD5 값을 요약하고 원본 파일의 MD5 값과 비교하여 무결성을 보장합니다. 업로드합니다.
서버 측에서는 모든 작은 블록을 연결하고 각 작은 블록의 MD5 값이 업로드된 MD5 값과 일치하는지 확인하여 업로드의 무결성을 보장합니다.
다음은 멀티파트 업로드를 구현하기 위한 간단한 Python 코드 예제입니다.

import hashlib
import os.path
import requests
  
def upload_file(file_path, chunk_size, url):  
    file_size = os.path.getsize(file_path)  
    file_name = os.path.split(file_path)[1]
    with open(file_path, 'rb') as file:  
        for i in range(0, int(file_size // chunk_size) + 1):  
            start = i * chunk_size  
            end = start + chunk_size - 1  
            if i == file_size // chunk_size:  
                end = file_size - 1  
            chunk_md5 = hashlib.md5()  
            with open(file_path, 'rb') as f:  
                f.seek(start)  
                chunk = f.read(chunk_size)  
                while chunk:  
                    chunk_md5.update(chunk)  
                    chunk = f.read(chunk_size)  
            chunk_md5 = chunk_md5.hexdigest()  
            files = {
    
    
                'file': (file_name, chunk, "video/mp4"),
            }
            data = {
    
    'chunk': chunk, 'chunk_md5': chunk_md5, 'file_path': file_path, 'start': start}  
            response = requests.post(url, files=files, data=data)  
            if response.status_code != 200:  
                raise Exception('Upload chunk failed')

이 기능은 파일을 chunk_size 크기의 청크로 분할하고 각 청크를 지정된 URL에 업로드합니다. 각 청크가 업로드되면 청크의 MD5 해시도 계산하여 파일 자체의 MD5 해시와 함께 서버로 보냅니다. 서버 측에서는 업로드의 무결성을 보장하기 위해 모든 청크를 연결하고 원본 파일과 비교할 수 있습니다.

추천

출처blog.csdn.net/lilongsy/article/details/131540403