获取文件夹中的最新文件并上传到s3?

流行病

filename变量用于获取最新文件的名称。我的目的是监视一个文件夹,并且每当检索到新文件时,就使用boto3将其自动上传到s3存储桶。

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from subprocess 
import call
import os
import boto3

会话= boto3.Session(aws_access_key_id ='aws_access_key_id',aws_secret_access_key ='aws_secret_access_key',region_name ='region_name')

s3 = session.client('s3')

class Watcher:
    def __init__(self):
        self.dir = os.path.abspath('D:\\project')
        self.observer = Observer()

    def run(self):
        event_handler = Handler()
        self.observer.schedule(event_handler, self.dir, recursive=True)
        self.observer.start()
        try:
            while True:
                time.sleep(5)
        except:
            self.observer.stop()
            print("Error")

        self.observer.join()   

    class Handler(FileSystemEventHandler):
        @staticmethod
        def on_any_event(event):
            if event.is_directory:
                return None

        elif event.event_type == 'created':
        print("Received created event - %s." % event.src_path)
        s3.upload_file(Filename=event.src_path, bucket='bucketname, key=test-file-1)

if __name__ == '__main__':
    w = Watcher()
    w.run()

FileNotFoundError:[WinError 2]系统找不到指定的文件

印度博览会

正如评论中提到的@alexhall一样,s3.meta.client.upload_file方法将上传文件。您可以在此处阅读有关boto3 s3客户端上传方法文档的信息:https ://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_file 但是,这是一个愚蠢的示例,因为它们首先创建的是s3资源而不是s3客户端,然后由于s3资源实际上没有上传文件的方法,因此它们又还原为s3客户端。您不妨直接创建并使用s3客户端进行上传。

您还依赖于这样的事实:创建s3资源时,boto3使用默认会话,就像您做的那样:

boto3.resource('s3')

如果您在lambda上运行代码,或者您处于配置了IAM角色以访问s3的ec2实例中,但我认为您在AWS外部运行此代码,则可以拥有一个boto3 .Session()首先使用您的凭据创建,然后客户端(或资源)可以使用该会话。

aws_access_key_id = '<AWS_ACCESS_KEY_ID>'
aws_secret_access_key = '<AWS_SECRET_ACCESS_KEY>'
region_name = 'us-east-1'

session = boto3.Session(aws_access_key_id=aws_access_key_id,
                                aws_secret_access_key=aws_secret_access_key,
                                region_name=region_name)

s3 = session.client('s3')

您可以在此处阅读有关会话配置的信息:https : //boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html

如上所述,由于您正在尝试上传文件,并且似乎没有对其进行任何其他操作,因此您最好直接创建s3客户端,而不是像以前那样创建s3资源,然后使用“元”获取s3客户端。客户'。

而不是command = ...线,只需使用:

s3.upload_file(Filename, Bucket = 'aaaaa', Key='test-file-1')

您可以删除最后一行。如果您正在运行OS / System命令而不是python中的命令,则将“调用”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取文件夹中的最新文件?

axios 从 URL 获取文件并上传到 s3

在“多文件上传”中,将单个文件上传到PHP的新文件夹中

从FTP文件夹获取最新的更新文件

如何在Amazon S3存储桶中创建新文件夹?

如何使用AWS PowerShell在S3中创建新文件夹

打开Linux文件夹中的最新文件

文件夹中的最新文件

在文件夹中打开最新文件(jpg)

使用boto3将文件上传到S3中的特定文件夹

亚马逊s3,将文件上传到存储桶中的文件夹中

通过 PySpark 获取 S3 中的最新文件

将文件上传到 s3 存储桶、sdk php 中的特定文件夹

如何使用python获取文件夹中的最新文件

获取文件夹中的第二最新文件

在Google云端硬盘文件夹中获取最新文件

如何在远程文件夹 PHP 中获取最新文件?

在Power BI文件夹源中获取最新的更新文件

新文件上传到S3存储桶时,没有发布SQS事件

Azure Blob存储-在将新文件上传到Blob容器中的特定文件夹时设置警报

如何将文件从表单上传到服务器并存储在新文件夹中

Google 表单根据提交的值将文件上传到特定的新文件夹

AWS CLI S3API在路径中找到最新文件夹

如何在不删除Amazon S3存储桶旧文件的情况下,使用文件的最新版本创建新文件夹?

仅将最新文件夹上传到FTP(本地->远程)

删除Python中除最新文件夹以外的所有文件夹

别名将转到文件夹中的最新文件夹

在Python中从FTP文件夹获取最新文件(文件名带有空格)

将JSON文件上传到Python中s3存储桶中的特定文件夹