我想在使用脚本创建对象时从 URL 上传许多图像。
#models.py
class Widget(TimeStampedModel):
name = CharField ... etc, etc
pic = ThumbnailerImageField(_('Widget Pic'),
upload_to='widget/pic/',
help_text = _('Please submit your picture here.'),
null=True, blank=True)
所以我想到了使用该类中的 save 方法来下载和保存图像。所以我的脚本创建了 Widget 对象并保存了图像 url,然后 save 方法尝试下载并保存图像。到目前为止,我的保存方法是:
def save(self, *args, **kwargs):
if self.pic:
if self.pic.name.startswith( 'http://') and self.pic.name.endswith(('.png', '.gif', '.jpg', '.jpeg', '.svg')):
my_temp_pic = open('test.image', 'w')
my_temp_pic.write(urllib2.urlopen(self.pic.name).read())
my_temp_pic.close()
my_temp_pic = open('test.image')
thumbnailer = get_thumbnailer(my_temp_pic, relative_name = self.slug+'.'+self.pic.name.split('.')[-1])
self.pic = thumbnailer.get_thumbnail({'size': (200, 0), 'crop': False})
super(Widget, self).save(*args, **kwargs)
我尝试使用 .read() 或 .open() 以不同的方式打开文件......但我发现(上图)的唯一方法感觉很hackish(保存一些带有图像的临时文件,重新打开,然后节省)。有没有更好的办法?我错过了一个简单的方法来做到这一点?