尝试将图像下载并保存到ImageField失败

时间:2011-12-30 15:12:18

标签: django

违规代码:

file_name = os.path.basename(image_url)
downloaded = urllib2.urlopen(image_url).read()
image_file = File(downloaded, name=file_name)
image_file.size = len( downloaded )

model = BlogPost()
model.image.save(file_name, image_file)
model.save()

型号:

类BlogPost(models.Model):     image = models.ImageField(upload_to ='blog-image',                               help_text ='特色图片',                               空白=真,                               空=真)

我得到了这个:

AttributeError: 'str' object has no attribute 'read'

如果我删除了行image_file.size:

AttributeError: 'str' object has no attribute 'name'

downloaded已填充,因此已成功下载该文件。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题是文件需要的不仅仅是内容。而不是尝试使用File并执行此操作:

image_file = File(downloaded, name=file_name)
image_file.size = len( downloaded )

我应该使用ContentFile并执行此操作:

image_file = ContentFile(downloaded)

来自documentation

  

ContentFile类继承自File,但与File不同,它对字符串内容而不是实际文件进行操作。