繁体   English   中英

如何使用 Boto3 获取 S3 存储桶的最新文件?

[英]How to get the latest file of an S3 bucket using Boto3?

我正在尝试在 S3 特定文件夹中获取最后添加的文件。 我参考这个( 如何使用 Boto3 下载 S3 存储桶的最新文件? )发布并尝试。

@api_view(("GET",))
def get_protocol(request, pk):

    union = Union.objects.get(pk=pk)
    s3 = get_s3_client()
    filepath = "media/private/" + str(pk) + "/certificate/docx"

    get_last_modified = lambda obj: int(obj["LastModified"].strftime("%s"))
    objs = s3.list_objects_v2(
        Bucket="unifolio",
        Prefix=filepath + "/" + "Union" + str(pk) + "_" + "certificate" + "3",
    )
    last_added = [obj["Key"] for obj in sorted(objs, key=get_last_modified)][0]
    url = s3.generate_presigned_url(
        ClientMethod="get_object",
        Params={"Bucket": "unifolio", "Key": last_added},
        # url 생성 후 60초가 지나면 접근 불가
        ExpiresIn=60,
    )

    return Response()

但错误发生如下:

  File "/Users/kimdoehoon/project/unifolio/unions/api_views.py", line 199, in get_protocol
    objs_sorted = [obj["Key"] for obj in sorted(objs, key=get_last_modified)]
  File "/Users/kimdoehoon/project/unifolio/unions/api_views.py", line 194, in <lambda>
    get_last_modified = lambda obj: int(obj["LastModified"].strftime("%s"))
TypeError: string indices must be integers

我不明白为什么索引必须是 integer 错误。 有人可以帮助我吗?

您的排序方法发生了一些奇怪的事情。

下面是一些使用 S3 资源检索最新修改的 object 的代码:

import boto3

s3_resource = boto3.resource('s3')

objects = list(s3_resource.Bucket('my-bucket').objects.filter(Prefix='my-folder/'))
objects.sort(key=lambda o: o.last_modified)

print(objects[-1].key)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM