Search code examples
djangoeasy-thumbnails

Django, retrieve image using url and save it ThumbnailerImageField of easy_thumbnails


I have used easy_thumbnailsto store images in my application. I have a model name Profile that has picture field which is ThumbnailerImageField. In my code I am fetching image using a url I have using the follwing code

f = urllib.request.urlretrieve(picture_url)

Now, f[0] is a string containing path to file in /tmp/ directory. I want to save this image to my picture field. So, I used following code

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

But the problem is that the saved file is corrupted for some reason and I am unable to open it. Whereas when I check for the file in/tmp/, it is a proper image file. Can anyone point out what am I doing wrong here?

EDIT:

My field definition is as following picture = ThumbnailerImageField(upload_to=name, max_length=3072)

and name is as following

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

Solution

  • 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