2012-07-25 80 views
0

當我上傳一個文件到Django時,它首先通過UploadHandlers。我已經用它來編寫一個進度條。當上傳完成時,「上傳文件」視圖被調用。請求對象將在磁盤上有一個InMemoryUploadedFile或一個臨時文件。django文件上傳 - 移動或複製文件?

這是我的問題:文檔建議按塊複製文件塊。對於大文件,這不需要很長時間(進度條卡在100%)?

做'移動'手術會不會更好?例如,在Windows上,您可以在同一個驅動器號中幾乎立即移動文件,複製需要很長時間。我相信這同樣適用於unix系統。

回答

0

是的,這同樣適用於Unix系統......其中「驅動器盤符」更像是一個路徑,因此您可能會發現/ opt/django/YourApp和/ opt/django/tmpUploadDir實際上是兩個不同的設備。

所以,相信「移動」,它總的來說並不值得。另一方面,在他/她解除「100%完成」對話框之後,您可以在客戶端查看過程之外進行復制。

或者您可能將複製時間計入總百分比。假設您知道複製速度爲每秒1 Mb,並且觀察網絡上傳速度爲每秒100 Kb。然後你知道一個1GB的文件總傳輸時間將是1100秒(不是1000),並且一旦計算出「舊」百分比是X,你就可以將它顯示爲X * DiskSpeed /(DiskSpeed + NetworkSpeed) 。當用戶上傳100%的文件時,他會看到進度欄爲91%,並在複製完成時增長到100%。

如果您的處理不僅僅是一個簡單的副本,例如,如果您通過ffmpeg重新編碼視頻。儘管如此,你確實需要對處理時間有一個很好的猜測,否則你最終會得到一個「上傳」欄,儘管非單調性(即你永遠不會看到它從80%變爲79%),並開始。

我認爲與上傳時間相比,複製時間可以忽略不計,可以安全地忽略。如果不是,則可能會顯示第二個不同的進度條,以便用戶看不到他/她可能認爲「異常」的任何內容。