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

Desidero caricare un file di grandi dimensioni su Dropbox. Come posso controllare i progressi? [Docs]Barra di avanzamento durante il caricamento di un file su dropbox

MODIFICA: L'uploader offeset è lo stesso in qualche modo. Che cosa sto facendo di sbagliato

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") 
+0

@ Kevin uscita: 'upload: 1700302131' –

+0

Qual è il significato della' dimensione' variabile? Sembra diverso da "tot_size". – Kevin

+0

@Kevin https://www.dropbox.com/developers-v1/core/docs/python#DropboxClient.get_chunked_uploader –

risposta

11

upload_chunked, come the documentation note:

Caricati i dati da s' file_obj in blocchi questo ChunkedUploader, fino a quando si verifica un errore . Genera un'eccezione quando si verifica un errore e può essere chiamato per riprendere il caricamento.

Quindi sì, carica l'intero file (a meno che non si verifichi un errore) prima di tornare.

Se si desidera caricare un pezzo alla volta da soli, è necessario utilizzare upload_chunk e commit_chunked_upload.

Ecco un codice di lavoro che mostra come caricare un singolo pezzo alla volta e stampare i progressi tra pezzi:

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.')