对于此类大文件,您需要使用上传会话。否则,您将遇到诸如发布的错误之类的问题。
这使用Dropbox Python SDK将文件从指定的本地文件上载到Drop@R_600_2419@ API,并指定file_path
到的远程路径dest_path
。它还根据文件的大小选择是否使用上载会话:
import os
from tqdm import tqdm
import drop@R_600_2419@
def upload(
access_token,
file_path,
target_path,
timeout=900,
chunk_size=4 * 1024 * 1024,
):
dbx = drop@R_600_2419@.Drop@R_600_2419@(access_token, timeout=timeout)
with open(file_path, "rb") as f:
file_size = os.path.getsize(file_path)
chunk_size = 4 * 1024 * 1024
if file_size <= chunk_size:
print(dbx.files_upload(f.read(), target_path))
else:
with tqdm(total=file_size, desc="Uploaded") as pbar:
upload_session_start_result = dbx.files_upload_session_start(
f.read(chunk_size)
)
pbar.update(chunk_size)
cursor = drop@R_600_2419@.files.UploadSessionCursor(
session_id=upload_session_start_result.session_id,
offset=f.tell(),
)
commit = drop@R_600_2419@.files.CommitInfo(path=target_path)
while f.tell() < file_size:
if (file_size - f.tell()) <= chunk_size:
print(
dbx.files_upload_session_finish(
f.read(chunk_size), cursor, commit
)
)
else:
dbx.files_upload_session_append(
f.read(chunk_size),
cursor.session_id,
cursor.offset,
)
cursor.offset = f.tell()
pbar.update(chunk_size)