如何从一个桶中获取图像并将其放入 S3 boto 中的另一个桶中

How to fetch an image from one bucket and put it in another in S3 boto

我想从一个桶(bucket1)中取出一张图片,然后把它放到另一个桶(bucket2)中 我已经在 python 中编写了下面的代码片段,我正在尝试,但我得到的是 error:IOError: cannot identify image file.Please help.Thanks!

 conn = boto.connect_s3()
 filename='image2.jpg'
 bucket=conn.get_bucket('bucket1')
 key= bucket.get_key(filename)
 fp = open (filename, "w+")
 key.get_file (fp)


img = cStringIO.StringIO(fp.read())
im = Image.open(img)

b = conn.get_bucket('bucket2')
k = b.new_key('image2.jpg')
k.set_contents_from_string(out_im2.getvalue())

为什么不直接使用 copy_key 来避免下载和写入对象:

b = conn.get_bucket('bucket2')
k = b.copy_key('image2.jpg', 'bucket1', 'image2.jpg')

因为你想做一些图像处理,你需要在写入文件后回到文件的开头:

fp.seek(0, 0)
img = cStringIO.StringIO(fp.read())
im = Image.open(img)

b = conn.get_bucket('bucket2')
k = b.new_key('image2.jpg')
k.set_contents_from_string(...)