私は同じ問題を抱えていて、私の場合はそれを解決することができました。これは、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
メソッドは機能しません。あなたが作成している一時ファイルのサイズを計算することができれば、あなたは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