[英]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.