Django File chunks()没有返回完整的二进制文件

时间:2013-06-17 03:04:08

标签: python

在Django中,我试图在我的模型上使用FileField,并使用文件系统上的现有文件进行设置。我试过这个,我只在媒体目录中获得了10个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

Django:1.5.1

Python:2.7.5

1 个答案:

答案 0 :(得分:1)

您需要以二进制模式打开文件:

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

请参阅Python文档中的Reading and Writing Files