Python implementa la carga de archivos de video en partes

La carga de varias partes es una técnica que divide un archivo grande en varios fragmentos más pequeños para la carga. Esta tecnología puede evitar cargar todo el archivo en el servidor de una sola vez, lo que mejora la eficiencia y la confiabilidad de la carga.

Los siguientes son los pasos básicos para implementar la carga de varias partes usando Python:

Divida el archivo que se cargará en varios bloques pequeños y calcule el valor MD5 de cada bloque pequeño.
A través del protocolo HTTP, cada bloque pequeño se carga en el servidor y se registra la información del bloque pequeño cargado, como el número de bloque, el tamaño del bloque, el valor MD5, etc.
En el lado del cliente, envíe solicitudes de empalme de todos los bloques pequeños al servidor a través del protocolo HTTP, resuma los valores MD5 de todos los bloques pequeños y compárelos con los valores MD5 del archivo original para garantizar la integridad del subir.
En el lado del servidor, todos los bloques pequeños se empalman y el valor MD5 de cada bloque pequeño se verifica si es consistente con el valor MD5 cargado para garantizar la integridad de la carga.
El siguiente es un ejemplo de código Python simple para implementar cargas de varias partes:

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')

Esta función divide el archivo en fragmentos de tamaño chunk_size y carga cada fragmento en la URL especificada. A medida que se carga cada fragmento, también calcula el hash MD5 del fragmento y lo envía al servidor junto con el hash MD5 del propio archivo. En el lado del servidor, todos los fragmentos se pueden unir y comparar con el archivo original para garantizar la integridad de la carga.

Supongo que te gusta

Origin blog.csdn.net/lilongsy/article/details/131540403
Recomendado
Clasificación