【问题标题】:Copy files from AWS S3 bucket to SFTP using Paramiko使用 Paramiko 将文件从 AWS S3 存储桶复制到 SFTP
【发布时间】:2020-04-08 13:23:39
【问题描述】:

我有一个要求,我需要将所有 CSV 文件从 S3 存储桶复制到 SFTP 位置。

我能够连接并建立连接,但我不确定如何使用 Paramiko 移动文件。

以下代码:

print('Establishing SFTP connection with ' + hostname + ' at port: ' + port)
filebjects = s3_client.list_objects_v2(Bucket=bucket_name)
# print(filebjects)

try:
    print("port")
    # return

    bucket = s3_rs.Bucket(str(keybucket))
    for obj in bucket.objects.all():
        key = obj.key
        body = obj.get()['Body'].read()
        decodedKey = body.decode('utf-8')

    key = paramiko.RSAKey.from_private_key(StringIO(decodedKey))
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    transport = paramiko.Transport((hostname,int(port)))
    transport.connect(username=username,pkey=key)
    sftp = paramiko.SFTPClient.from_transport(transport)

    print("sftp")
    client.put(localpath="fileName",remotepath="SFTP_REMO_FOLDER",)

    sftp.chdir(path=remote_directory)

    print(sftp.listdir(path='.'))

    # for object in filebjects['Contents']:
    #     obj=client.get_object(Bucket=bucket_name,Key=fileName)
    #     file_data = obj['Body'].read()
    #     print(file_data)


    # return
    transport.close()

我不确定这里的文件名应该是什么我将所有对象和文件名分开。有什么建议吗?

【问题讨论】:

    标签: python amazon-s3 sftp boto3 paramiko


    【解决方案1】:

    您可能正在寻找这样的东西:

    sftp.putfo(BytesIO(body), "/remote/path/name.ext")
    

    虽然有一种更有效的方法是直接从 S3 检索类似文件的对象,而不是将内容复制两次。见Transfer file from AWS S3 to SFTP using Boto 3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-23
      • 2018-11-22
      • 2023-02-01
      • 2022-01-11
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多