使用 Django 将图像上传到 Amazon S3

2023-11-21

目前,当用户上传图片时,我正在动态调整图像大小。原始图片存储在 Amazon S3 上名为 djangobucket 的存储桶中。该存储桶内包含数千个文件夹。

每个文件夹都以用户的名字命名。我不必担心存储桶创建或文件夹创建,因为所有这些都是从客户端处理的。

这是一个图表:

djangobucket  ------------> bob ---------> picture1.jpg
                                           picture2.jpg
                                           picture3.jpg
                                           picture4.jpg

正如您所看到的,鲍勃有很多照片。一旦用户将图片上传到 S3,我就会通过 Django 通过 URL 下载它,在本例中它将是:http://s3.amazonaws.com/djangobucket/bob/picture1.jpg

我下载图像并执行图像处理并将处理后的图像保存在我的 django 应用程序服务器上。

我想将处理后的图像发送回鲍勃的文件夹中,以便可以在以下位置公开访问它: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 的文件夹并使其公开可见。

感谢您的帮助。

EDIT我找到了这个链接: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 and 博托 S3 文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Django 将图像上传到 Amazon S3 的相关文章

随机推荐