使用会话上传大文件时如何设置写入模式
How to set WriteMode when using a sesssion to upload large file
我正在编写一个脚本,使用 python 保管箱模块 (V2) 将文件上传到保管箱。文件将根据大小一次性或通过会话上传。相关代码如下:
with open(file, 'rb') as f:
try:
file_size = os.path.getsize(file)
chunk_size = 4*1024*1024
if file_size < chunk_size:
dbx.files_upload(f.read(), file_to, mode=dropbox.files.WriteMode.overwrite)
else:
session_start_result = dbx.files_upload_session_start(f.read(chunk_size))
cursor = dropbox.files.UploadSessionCursor(session_id=session_start_result.session_id, offset=f.tell())
commit = dropbox.files.CommitInfo(path=file_to)
while f.tell() < file_size:
if (file_size - f.tell()) <= chunk_size:
dbx.files_upload_session_finish(f.read(chunk_size), cursor, commit)
else:
dbx.files_upload_session_append_v2(f.read(chunk_size), cursor)
cursor.offset = f.tell()
但是,如果会话选项用于上传与 Dropbox 文件夹中已有文件同名的大文件,这将引发错误。对于小文件上传,您可以设置 WriteMode,但是在使用 session/cursor.
时我找不到任何关于如何执行此操作的文档
任何正确方向的帮助或推动将不胜感激。
使用上传会话时,您可以通过 mode
参数在 the dropbox.files.CommitInfo
object 上设置 WriteMode
。那应该是一个dropbox.files.WriteMode
,就像在小文件场景中一样。
然后您将 CommitInfo
传递给 files_upload_session_finish
,就像您已经在做的那样。
我正在编写一个脚本,使用 python 保管箱模块 (V2) 将文件上传到保管箱。文件将根据大小一次性或通过会话上传。相关代码如下:
with open(file, 'rb') as f:
try:
file_size = os.path.getsize(file)
chunk_size = 4*1024*1024
if file_size < chunk_size:
dbx.files_upload(f.read(), file_to, mode=dropbox.files.WriteMode.overwrite)
else:
session_start_result = dbx.files_upload_session_start(f.read(chunk_size))
cursor = dropbox.files.UploadSessionCursor(session_id=session_start_result.session_id, offset=f.tell())
commit = dropbox.files.CommitInfo(path=file_to)
while f.tell() < file_size:
if (file_size - f.tell()) <= chunk_size:
dbx.files_upload_session_finish(f.read(chunk_size), cursor, commit)
else:
dbx.files_upload_session_append_v2(f.read(chunk_size), cursor)
cursor.offset = f.tell()
但是,如果会话选项用于上传与 Dropbox 文件夹中已有文件同名的大文件,这将引发错误。对于小文件上传,您可以设置 WriteMode,但是在使用 session/cursor.
时我找不到任何关于如何执行此操作的文档任何正确方向的帮助或推动将不胜感激。
使用上传会话时,您可以通过 mode
参数在 the dropbox.files.CommitInfo
object 上设置 WriteMode
。那应该是一个dropbox.files.WriteMode
,就像在小文件场景中一样。
然后您将 CommitInfo
传递给 files_upload_session_finish
,就像您已经在做的那样。