如何搜索我的存储桶以查看是否存在某个文件

时间:2018-03-18 05:20:20

标签: python django amazon-web-services amazon-s3

这是我的第三节:

img = request.FILES.get('image')

filename = random_string()

"""if filename exists in my s3 bucket:
    create another random_string"""

session = boto3.Session(
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
s3 = session.resource('s3')

s3.Bucket('my-bucket').put_object(Key='media/%s' % img.name, Body=img)

基本上,当我通过AJAX上传文件时,根据上面的代码,我生成一个随机文件名。但是,在为新上传的图像使用此文件名之前,我想检查它是否存在,以防止重叠。如果确实存在,则尝试另一个随机字符串。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你的随机功能有多好?如果可能,我建议使用UUID generator来提出文件名,并假设没有碰撞(或假设最终发生碰撞,并按照后续步骤进行操作。)

关于如何判断一个密钥是否已经存在,我希望你可以只执行一个“获取对象”。对于给定的生成密钥。如果你得到了回报,那么那里就有一个对象,应该生成并测试一个新密钥。

请注意,此方法不是原子操作,并且会为其他位置生成密钥的窗口(假设可以执行多个并发执行)并在check和put之间放入S3存储桶。正是因为这种可能性,我才首先推荐UUID发生器。

答案 1 :(得分:0)

检查random_string()功能。也许缓存随机字符串的结果,并确认在返回之前没有使用您要返回的字符串。