使用Dropbox API和Python导致大文件上传到Dropbox时出错

时间:2017-10-25 18:24:06

标签: python file-upload dropbox-api

我正在尝试使用Python和Dropbox API v2将大型压缩文件上传到Dropbox(大约2-3GB)。我使用的是“chunked method”:dropbox API v2 upload large files using python。为方便起见,这是代码:

f = open(file_path)
file_size = os.path.getsize(file_path)

CHUNK_SIZE = 4 * 1024 * 1024

if file_size <= CHUNK_SIZE:

    print dbx.files_upload(f, dest_path)

else:

    upload_session_start_result = dbx.files_upload_session_start(f.read(CHUNK_SIZE))
    cursor = dropbox.files.UploadSessionCursor(session_id=upload_session_start_result.session_id,
                                               offset=f.tell())
    commit = dropbox.files.CommitInfo(path=dest_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()

然而,当我运行它时,我得到了一个

  

dropbox.exceptions.APIError

以及

  

UploadSessoionLookupError

  

UploadSessionOffsetError

我认为错误可能发生在这一行:

 dbx.files_upload_session_append(f.read(CHUNK_SIZE),
                                       cursor.session_id,
                                       cursor.offset)

我尝试过交换

dbx.files_upload_session_append_v2(
                f.read(self.CHUNK_SIZE), cursor)

但这也不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在Windows上,请确保使用二进制模式打开

f = open(file_path, 'rb')

f.read(chunk_size)f.tell()已关闭。

来自python文档

  

在Windows上,当读取带有Unix样式的行尾的文件时,tell()可以返回非法值(在fgets()之后)。使用二进制模式(‘rb’)来解决此问题。