0

Django では、モデルで FileField を使用し、ファイルシステム上の既存のファイルを使用して設定しようとしています。これを試してみましたが、メディア ディレクトリに数十 KB しかありませんでした。

c = MyClass()
f = open('D:\\bin.jpg')
df = File(file)
c.file.save('newFile', df)
f.close()
c.save()

FileField.save は File.chunks を呼び出しますが、バイナリ ファイルの場合はすべてを取得していないように見えます。ここで何か不足していますか?

f_text = File(open('D:\\text.txt'))
print f_text.size / 1024. / 1024
>> 13.7466430664
print sum([len(c) for c in f_text.chunks()]) / 1024. / 1024
>> 13.7466430664

f_bin = File(open('D:\\bin.jpg'))
print f_bin.size / 1024. / 1024
>> 0.741801261902
print sum([len(c) for c in f_bin.chunks()]) / 1024. / 1024
>> 0.00253677368164

f = MyClass.objects.get(id=50).file
# is file as f_bin uploaded using Django admin tool
print f.size / 1024. / 1024
>> 0.741801261902
print sum([len(c) for c in f.chunks()]) / 1024. / 1024
>> 0.741801261902

システム: Windows 7

ジャンゴ: 1.5.1

パイソン: 2.7.5

4

1 に答える 1

1

ファイルをバイナリ モードで開く必要があります。

f_bin = File(open('D:\\bin.jpg', 'rb'))

Python ドキュメントのファイルの読み取りと書き込みを参照してください。

于 2013-06-17T03:13:07.953 に答える