マルチパート アップロードは、大きなファイルを複数の小さなチャンクに分割してアップロードする手法です。この技術により、ファイル全体を一度にサーバーにアップロードする必要がなくなり、アップロードの効率と信頼性が向上します。
以下は、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 ハッシュとともにサーバーに送信されます。サーバー側では、すべてのチャンクを結合して元のファイルと比較して、アップロードの整合性を確保できます。