Копирование файлов из AWS S3 bucket в SFTP с использованием Paramiko - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть требование, когда мне нужно скопировать все файлы 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()

Я не уверен, что следует быть в имени файла здесь я получаю все объекты и имя файла отдельно. Любое предложение?

1 Ответ

0 голосов
/ 08 апреля 2020

Вы, вероятно, ищете что-то вроде этого:

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

Хотя, возможно, существует более эффективный способ получения файлового объекта непосредственно из S3, а не копирования содержимого поверх в два раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...