Индикатор выполнения При загрузке файла в dropbox

import dropbox
client = dropbox.client.DropboxClient('<token>')
f = open('/ssd-scratch/abhishekb/try/1.mat', 'rb')
response = client.put_file('/data/1.mat', f)

Я хочу загрузить большой файл в dropbox. Как я могу проверить прогресс? [Docs]

изменить: Загрузчик offeset такой же ниже как-то. Что я делаю не так?--6-->

import os,pdb,dropbox
size=1194304
client = dropbox.client.DropboxClient(token)
path='D:/bci_code/datasets/1.mat'

tot_size = os.path.getsize(path)
bigFile = open(path, 'rb')

uploader = client.get_chunked_uploader(bigFile, size)
print "uploading: ", tot_size
while uploader.offset < tot_size:
    try:
        upload = uploader.upload_chunked()
        print uploader.offset
    except rest.ErrorResponse, e:
        print("something went wrong")

EDIT 2:

size=1194304
tot_size = os.path.getsize(path)
bigFile = open(path, 'rb')

uploader = client.get_chunked_uploader(bigFile, tot_size)
print "uploading: ", tot_size
while uploader.offset < tot_size:
    try:
        upload = uploader.upload_chunked(chunk_size=size)
        print uploader.offset
    except rest.ErrorResponse, e:
        print("something went wrong")

1 ответов


upload_chunked, as документация Примечания:

загружает данные из этой ChunkedUploader ' s file_obj кусками, пока возникает ошибка. Вызывает исключение при возникновении ошибки, и может быть снова позвонил, чтобы возобновить загрузку.

так что да, он загружает весь файл (если произошла ошибка), прежде чем вернуться.

если вы хотите загрузить кусок за раз самостоятельно, вы должны использовать upload_chunk и commit_chunked_upload.

вот рабочий код, который показывает вам, как загружать один кусок за раз и печатать прогресс между кусками:

from io import BytesIO
import os

from dropbox.client import DropboxClient

client = DropboxClient(ACCESS_TOKEN)

path = 'test.data'
chunk_size = 1024*1024 # 1MB

total_size = os.path.getsize(path)
upload_id = None
offset = 0
with open(path, 'rb') as f:
    while offset < total_size:
        offset, upload_id = client.upload_chunk(
            BytesIO(f.read(chunk_size)),
            offset=offset, upload_id=upload_id)

        print('Uploaded so far: {} bytes'.format(offset))

# Note the "auto/" on the next line, which is needed because
# this method doesn't attach the root by itself.
client.commit_chunked_upload('auto/test.data', upload_id)
print('Upload complete.')