tch*_*ore 4 python django urllib2
我正在尝试从URL下载图像文件,然后将该图像分配给Django ImageField.我按照这里的例子和[这里](
我的模型在相关部分看起来像这样:
class Entity(models.Model):
logo = models.ImageField(upload_to=_getLogoPath,null=True)
Run Code Online (Sandbox Code Playgroud)
_getLogoPath回调非常简单:
def _getLogoPath(self,filename):
path = "logos/" + self.full_name
return path
Run Code Online (Sandbox Code Playgroud)
获取和保存图像文件的代码也很简单,作为我计划作为定期计划的cron作业运行的自定义django-admin命令的一部分:
...
img_url = "http://path.to.file/img.jpg"
img = urllib2.urlopen(img)
entity.logo.save(img_filename,img,True)
...
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到此错误:
AttributeError: addinfourl instance has no attribute 'chunks'
Run Code Online (Sandbox Code Playgroud)
我也尝试添加read()到图像但导致类似的错误.我也尝试将图像写入临时文件,然后尝试上传,但我得到了同样的错误.
如果您阅读文档,您将看到第二个参数entity.logo.save需要是一个实例django.core.files.File
因此,要检索图像然后使用图像字段保存它,您需要执行以下操作.
from django.core.files import File
response = urllib2.urlopen("http://path.to.file/img.jpg")
with open('tmp_img', 'wb') as f:
f.write(response.read())
with open('tmp_img', 'r') as f:
image_file = File(f)
entity.logo.save(img_filename, img_file, True)
os.remove('tmp_img')
Run Code Online (Sandbox Code Playgroud)
您从通话中收到的对象urlopen不是图像本身.它的read方法将返回二进制图像数据.
| 归档时间: |
|
| 查看次数: |
5166 次 |
| 最近记录: |