我目前正在动态调整用户上传图片时的图片大小。原始图片存储在名为djangobucket的存储区中的Amazon S3上。在此存储桶中,包含数千个文件夹。
每个文件夹均以用户命名。我不必担心存储区创建或文件夹创建,因为所有这些操作都是从客户端处理的。
这是一个图:
djangobucket ------------> bob ---------> picture1.jpg
picture2.jpg
picture3.jpg
picture4.jpg
如您所见,鲍勃有很多照片。用户将图片上传到S3后,我将通过URL通过Django下载图片,在这种情况下,它将是:http : //s3.amazonaws.com/djangobucket/bob/picture1.jpg
我下载图像并执行图像处理,并将处理后的图像保存在django应用服务器上。
我想将此经过处理的图像发送回bob的文件夹,以便可以在http://s3.amazonaws.com/djangobucket/bob/picture1_processed.jpg上公开访问它。
客户已经可以访问亚马逊密钥和秘密密钥,以便他或她可以将图片上传到此存储桶。服务上的所有用户都使用相同的密钥。我也将使用相同的键。
我听说过一种叫做Boto的东西,但是它涉及创建存储桶,我不确定如何仅执行上传部分。我只关心将图片上传到适当的用户文件夹。
我已经研究了几个小时,所以我去找了这里的专家。
这是我的代码,以便您可以更好地了解我在做什么。
user = 'bob'
url = 'http://s3.amazonaws.com/djangobucket/bob/picture1.jpg'
filename = url.split('/')[-1].split('.')[0]
download_photo = urllib.urlretrieve(url, "/home/ubuntu/Desktop/Resized_Images/%s.jpg" % (filename))
downloaded_photo = Image.open("/home/ubuntu/Desktop/Resized_Images/%s.jpg" % (filename))
resized_photo = downloaded_photo.resize((300, 300), Image.ANTIALIAS)
new_filename = filename + "_processed"
resized_photo.save("/home/ubuntu/Desktop/Resized_Images/%s.jpg" % (new_filename))
我想将保存在/ home / ubuntu / Desktop / Resized_Images /中的调整大小后的照片发送到Amazon S3上djangobucket中的Bob的文件夹中,并使其公开可见。
谢谢你的帮助。
编辑我找到了此链接:http : //www.laurentluce.com/posts/upload-and-download-files-tofrom-amazon-s3-using-pythondjango/
对于我的案子,如何使用它并不完全是正确的,但是我认为我走在正确的道路上。
boto
是做到这一点的最佳方法。
您可以使用以下方法获取现有存储桶:
get_bucket(bucket_name, validate=True, headers=None)
安装boto后,此代码应完成您需要做的事情
from boto.s3.connection import S3Connection
from boto.s3.key import Key
conn = S3Connection('<aws access key>', '<aws secret key>')
bucket = conn.get_bucket('<bucket name>')
k = Key(bucket)
k.key = 'file_path_on_s3' # for example, 'images/bob/resized_image1.png'
k.set_contents_from_file(resized_photo)
以下是Boto API和Boto S3 Doc的一些链接
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句