I want to allow users upload an image through the Django admin, crop and scale that image in memory (probably using PIL), and save it to Amazon S3 without saving the image on the local filesystem. I’ll save the image path in my database, but that is the only aspect of the image that is saved locally. I’d like to integrate this special image upload widget into the normal model form on the admin edit page.
This question is similar, except the solution is not using the admin interface.
Is there a way that I can intercept the save action, do manipulations and saving of the image to S3, and then save the image path and the rest of the model data like normal? I have a pretty good idea of how I would crop and scale and save the image to S3 if I can just get access to the image data.
See https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#changing-upload-handler-behavior
If images are smaller than a particular size, the will already be stored only in memory, so you can likely tune the
FILE_UPLOAD_MAX_MEMORY_SIZEparameter to suit your needs. Additionally, you’ll have to make sure that you don’t access the.pathfield of these uploaded images, because that will cause them to be written out to a file. Instead, use (for example) the.read()method. I haven’t tested this, but I believe this will work: