我有同樣的問題,並能解決它的情況。這是Django使用以確定一個文件的大小的代碼:
def _get_size(self):
if not hasattr(self, '_size'):
if hasattr(self.file, 'size'):
self._size = self.file.size
elif os.path.exists(self.file.name):
self._size = os.path.getsize(self.file.name)
else:
raise AttributeError("Unable to determine the file's size.")
return self._size
因此,Django將引發一個AttributeError
如果該文件不存在於磁盤上(或已經定義的大小屬性)。由於TemporaryFile
類嘗試在內存中創建文件而不是實際在磁盤上,因此此_get_size
方法不起作用。爲了得到它的工作,我不得不做這樣的事情:
import tempfile, os
# Use tempfile.mkstemp, since it will actually create the file on disk.
(temp_filedescriptor, temp_filepath) = tempfile.mkstemp()
# Close the open file using the file descriptor, since file objects
# returned by os.fdopen don't work, either
os.close(temp_filedescriptor)
# Open the file on disk
temp_file = open(temp_filepath, "w+b")
# Do operations on your file here . . .
modelObj.fileField.save("filename.txt", File(temp_file))
temp_file.close()
# Remove the created file from disk.
os.remove(temp_filepath)
或者(最好),如果你可以計算出你所創建的臨時文件的大小,你可以設置一個大小屬性直接在TemporaryFile
對象上。由於我使用的圖書館,這不是我的可能性。
什麼是錯誤類型? –
@john這是一個AttributeError。 – Conan