I\'m trying to upload big file (~900MB) via Dropbox API v2 but I\'m getting this error:
requests.exceptions.ConnectionError: (\'Connection aborted.\',
For large files like this, you'll need to use upload sessions. Otherwise, you'll run in to issues like the error you posted.
This uses the Dropbox Python SDK to upload a file to the Dropbox API from the local file as specified by file_path
to the remote path as specified by dest_path
. It also chooses whether or not to use an upload session based on the size of the file:
import os
from tqdm import tqdm
import dropbox
def upload(
access_token,
file_path,
target_path,
timeout=900,
chunk_size=4 * 1024 * 1024,
):
dbx = dropbox.Dropbox(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 = dropbox.files.UploadSessionCursor(
session_id=upload_session_start_result.session_id,
offset=f.tell(),
)
commit = dropbox.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)