Я беру загруженные файлы, которые я могу сохранить на S3, используя SimpleS3:
from simples3.bucket import S3Bucket
upload = request.POST['image']
s = S3Bucket("cdn", s3.access_key, s3.secret_key)
s.put(upload.filename, upload.file.read())
Где-то между сохранением этого файла и его загрузкой я сохраняю файл, который является изображением в виде миниатюры, используя PIL или Imagemagick в зависимости от того, какой файл изображения был загружен. Процесс заключается в том, чтобы превратить файл в изображение. Мой вопрос заключается в том, как открыть это изображение в виде файла? Я пытаюсь загрузить миниатюру в Amazon S3 точно так же, как и выше. Мой код ниже - это идея того, что я пытаюсь сделать:
thumb = self._im.copy() #where _im is the Image
s = S3Bucket("cdn", s3.access_key, s3.secret_key)
s.put(self.filename+ext, thumb)
Я пробовал без успеха:
f = open(thumb, "rb")
s.put(self.filename+ext, f.read()
Что работает, но невероятно неэффективно, записывает файл на диск с помощью функции Image.save, а затем открывает его как файл:
thumb.save(self.filename+ext)
f = open(self.filename+ext, 'r')
s.put(self.filename+ext, f.read())
Выяснилось:
from StringIO import StringIO
f = StringIO()
thumb.save(f, ext)
s.put(self.filename+ext, f.getvalue())
Для случая ImageMagick, если вы используете PythonMagick, вы можете использовать базовый класс Blob,
>>> from PythonMagick import Image, Blob
>>> image = Image("images/test_image.miff")
>>> image.magick("PNG")
>>> blob = Blob()
>>> image.write(blob)
>>> len(blob.data)
28282
>>> blob.data[0:20]
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x94'