Django, получить изображение, используя URL и сохранить его ThumbnailerImageField of easy_thumbnails

Я использовал easy_thumbnailsхранить изображения в моем приложении. У меня есть название модели Profile который имеет picture поле, которое является ThumbnailerImageField. В моем коде я выбираю изображение, используя URL-адрес, который у меня есть, используя следующий код

f = urllib.request.urlretrieve(picture_url)

Теперь f[0] это строка, содержащая путь к файлу в /tmp/ каталог. Я хочу сохранить это изображение в моем поле изображения. Итак, я использовал следующий код

profile.picture.save(os.path.basename(picture), File(open(f[0])))

Но проблема в том, что сохраненный файл по какой-то причине поврежден, и я не могу его открыть. Принимая во внимание, что когда я проверяю файл в/tmp/это правильный файл изображения. Кто-нибудь может указать, что я здесь делаю не так?

РЕДАКТИРОВАТЬ:

Мое определение поля следующееpicture = ThumbnailerImageField(upload_to=name, max_length=3072)

а также name как следует

def name(inst, fname):
f = sha256((fname + str(timezone.now())).encode('utf-8')).hexdigest()
f += fname
return '/'.join([inst.__class__.__name__, f])

1 ответ

Решение
from django.core.files.temp import NamedTemporaryFile
try:
    img_temp = NamedTemporaryFile(delete=True)
    img_temp.write(
        urllib2.urlopen(picture_url).read()
    )
    img_temp.flush()
    profile.picture.save('picture.jpg', File(img_temp))
    profile.save()
except:
    pass
Другие вопросы по тегам