2015-11-27 11 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) 

Ich möchte eine große Datei in Dropbox hochladen. Wie kann ich den Fortschritt überprüfen? [Docs]Fortschrittsbalken beim Hochladen einer Datei in Dropbox

EDIT: Der Uploader offeset ist gleich unten irgendwie. Was mache ich falsch

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 Ausgabe: 'Upload: 1700302131' –

+0

Was ist die Bedeutung des' Größe? Variable? Es scheint anders zu sein als "tot_size". – Kevin

+0

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

Antwort

11

upload_chunked, wie the documentation Hinweise:

Uploads von Daten aus dieser ChunkedUploader ‚s file_obj in Stücke, bis ein Fehler auftritt . Es wird eine Ausnahme ausgelöst, wenn ein Fehler auftritt, und kann erneut aufgerufen werden, um den Upload fortzusetzen.

Also ja, es lädt die gesamte Datei (es sei denn, ein Fehler auftritt) vor der Rückkehr.

Wenn Sie einen Chunk auf einmal selbst hochladen möchten, sollten Sie upload_chunk und commit_chunked_upload verwenden.

Hier einiger Arbeitscode, der zeigt, wie ein einzelnen Brocken zu einer Zeit und Druck Fortschritt zwischen Chunks zu:

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