2012-12-22 37 views
0

我對可恢復的上傳到谷歌驅動器有點困惑,我希望如果有人能夠友好地澄清一些事情。正確使用python客戶端庫的可恢復上傳

在這個頁面: https://developers.google.com/api-client-library/python/guide/media_upload
它指出:

對於大型媒體文件,您可以使用斷點續傳媒體上傳來發送文件,這使得文件以小塊上傳。

還描述了使用next_chunk(),檢查錯誤和使用expotential重試的方法。

所有其他提及上傳(插入或更新文件)的引用都使用「resumable = True」,但未實現「next_chunk」功能。像本頁內容:https://developers.google.com/drive/v2/reference/files/insert#examples

這是否意味着「可恢復」是由庫處理的?
如果不是,在發生錯誤的情況下,是否與上例(使用next_chunk)相同?
如果我的應用程序應該捕獲錯誤,那麼唯一的辦法就是從一開始就開始上傳,因爲沒有成功字節或其他東西的返回。這是正確的方式嗎?

也就在這個頁面:https://developers.google.com/drive/manage-uploads
它指出:

隨着斷點續傳,可以打破一個文件分割成塊,併發送一系列請求上傳每個塊的序列。這不是首選的方法,因爲與額外請求相關的性能成本,並且通常不需要。

這兩個陳述中哪一個是正確的?

在此先感謝您的任何意見。
安德烈亞斯

回答

0

安德烈亞斯,

相信service.files.insert()執行()與可恢復= true屬性確實類似於手動next_chunk東西你張貼...我的例子我不知道它究竟如何處理它,因爲我找不到一種方法來讀取源代碼(我剛剛開始使用python),但是如果我使用.insert()函數中斷上載大文件execute( )方法可恢復= true,則輸出的線路之一是這樣的:

File "/usr/lib/python2.5/site-packages/apiclient/http.py", line 656, in execute 
    _, body = self.next_chunk(http=http) 

但是,我無法找到一種方式來獲得一個逐行ss指示符,所以我更願意使用手動request.next_chunk(),而不是。

關於可恢復上傳的性能成本,有額外的信息被髮送,但我不認爲它會減慢過程...你可以使用更大的塊(一些MiB),以便額外的請求字節可以忽略不計。 SDK文檔確實主張在某些情況下可恢復上載:

「要更可靠地上傳數據文件,可以使用可恢復的上傳協議。此協議允許您在通信故障中斷後恢復上傳操作數據流。如果您傳輸的是大文件,並且網絡中斷或某些其他傳輸失敗的可能性很高,例如從移動客戶端應用上傳時,此功能尤其有用。它還可以在發生網絡故障時減少帶寬使用量,因爲您不必從頭開始重新啓動大文件上傳。「