2014-03-01 41 views
1

我有以下方法將directory_path中的所有文件複製到my django model。那麼,這是按預期工作:將文件複製到upload_to模型中定義的位置。但是有一個問題:並非所有東西都被複制。只有一部分文件。像17.530字節,而不是〜1-2兆字節。 :(這讓我很傷心Django:複製文件只複製一部分

def _handle_directory(self, directory_path, directory): 
    for fs_name in os.listdir(directory_path): 
     fs_path = os.path.join(directory_path, fs_name) 
     if os.path.isfile(fs_path): 
      path = os.path.join(directory_path, fs_path) 
      with open(path, 'r') as f: 
       file_wrapper = File(f) 
       self.cnt_files += 1 
       new_file = FsFile(directory=directory, 
            filename=fs_name.decode(self.fs_encoding).encode('utf-8'), 
            file=file_wrapper, uploader=self.uploader) 
       new_file.save() 

更新1:

我跑這三個文件:

filename | orig. size | imported size | ratio 
foo.pdf | 70.818 | 1365   | 1,92 % 
bar.html | 3.355 | 3355   | 100 % 
fiz.zip |  645 | 135   | 20,93 % 
+0

我不能發現一個明顯的問題。收集更多數據。嘗試使用另一個文件。同樣的問題?無論文件大小如何,都會複製**完全相同的**字節數量?有類似的百分比?沒有?如果你嘗試使用內存中的字符串(使用'StringIO'使它看起來像一個文件),相同的結果?您是否將吞嚥異常的某處放在呼叫鏈上?嘗試在函數 – slezica

+0

內使用本地try-catch,我使用文件大小更新了我的問題。沒有例外。 – tjati

+0

每次嘗試時,相同的文件是否獲得相同的%?也許是,您可能是使用異步線程或進程來複制文件,並且在關閉文件之前您並未等待複製完成? – slezica

回答

0

好吧,我回答這個問題,因爲jensq沒有。

我不得不添加b -flag到open

 with open(path, 'rb') as f: 

然後,一切都按我期望的方式工作。