我想检查今天在 s3 中上传的文件并检查文件是不是超过 1 小时

Posted

技术标签:

【中文标题】我想检查今天在 s3 中上传的文件并检查文件是不是超过 1 小时【英文标题】:I want to check files which are uploaded today in s3 and check if the files are more than 1 hour我想检查今天在 s3 中上传的文件并检查文件是否超过 1 小时 【发布时间】:2021-12-22 05:30:57 【问题描述】:

我想创建一个 lambda,每隔一小时监控一个 s3 存储桶。 lambda 的条件应该是这样的:

如果今天上传了文件,则 lambda 应该获取对象列表并检查 lastmodified 是否距离现在超过 1 小时。

如果今天没有文件上传,lambda 应该什么都不做。 我尝试了下面的代码,但它给了我所有旧文件。我不希望 lambda 检查昨天或之前上传的文件。它应该只检查今天上传的那些文件,并告诉我这些文件是否早于现在 1 小时。

我不想要 s3 事件通知。

请帮助我如何实现这一目标

import boto3
import os 
from datetime import datetime, timedelta, timezone
from dateutil.tz import tzutc, UTC

TOPIC_ARN = 'mysnstopicarn'

s3_resource = boto3.client('s3')
sns_resource = boto3.resource('sns')
sns_topic = sns_resource.Topic(TOPIC_ARN)

lessthan = []
greaterthan = []
result = []

listobjects = s3_resource.list_objects(Bucket='mybucketname',Delimiter='Archives')['Contents']

def lambda_handler(event, context):

    for key in listobjects:
 
        if key['LastModified'] < datetime.now(timezone.utc) - timedelta(hours=1):
    
          lessthan.append(key['Key'])

    for i in lessthan:
      path, filename = os.path.split(i)
      result.append(filename)
    final = list(filter(None, result))

    sns_topic.publish(Message=f"This object final is more than one hour old")

【问题讨论】:

【参考方案1】:

您正在寻找最新的文件,因此您应该寻找LastModified大于您的目标日期。

# if LastModified is greater than (not less than) the target
if key['LastModified'] > datetime.now(timezone.utc) - timedelta(hours=1):

【讨论】:

```if key['LastModified'] > datetime.now(timezone.utc) - timedelta(hours=1):

以上是关于我想检查今天在 s3 中上传的文件并检查文件是不是超过 1 小时的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC3 中检查上传文件是不是有病毒

如何使用Coldfusion fileExist检查Amazon S3上是否存在文件?

Django-storage - 如何在上传前检查文件大小?

如何使用节点 js 检查“s3”/“azure”路径中是不是存在文件

Laravel如何检查文件是不是成功上传?

Node.js:如何在不上传文件列表的情况下检查文件夹是不是为空