到AWS S3的FTPS带有ftplib和boto3错误:Fileobj必须执行读取

2024-04-28 22:29:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python创建一个从ftps站点到S3存储桶的数据传输

for ftp_file in files_to_upload:
                ftp_file_obj = self.ftp_client.retrbinary('RETR '+ftp_file,open(ftp_file,'wb').write)
                print(ftp_file_obj)
                if self.s3_upload(
                    ftp_file_obj, ftp_file):
                    print('file uploaded to s3')
                    files_to_move.append(ftp_file)

我必须遍历FTP目录并将这些文件加载到内存中。然后,我需要将该文件放入内存并将其推送到S3。我得到Fileobj必须实现读取错误,但我不知道为什么

Successfully transferring the first file it finds

我确实有代码打印ftp_file_obj,而且对我来说很奇怪,它是成功传输的字符串打印输出。我一定是用错了retrbinary,或者文件存储不正确。是的,虽然我确实希望它存储在内存中,但我在本例中使用write来确保文件看起来像预期的那样


Tags: 文件to内存selfobjs3ftpfiles
1条回答
网友
1楼 · 发布于 2024-04-28 22:29:01

好吧,算了。将其流式传输到r中,r是BytesIO(),r.write作为retrbinary上的回调。然后,使用r.seek(0)将光标移动到数据块的开头。然后上传。我不建议使用ftplib库,除非您必须使用它。我不得不这么做,因为我必须使用FTP_TLS,而paramiko库不支持TLS。我希望谷歌的同事会觉得这很有用

for ftp_file in files_to_upload:
    s3_partition = self.create_s3_partition(ftp_file)
    r=BytesIO()
    self.ftp_client.retrbinary('RETR '+ftp_file, \
    r.write)
    r.seek(0)
    if self.s3_upload_file_multipart(
        r, s3_partition+ftp_file+date_long):
        print(ftp_file+' uploaded to s3')
        files_to_move.append(ftp_file)

相关问题 更多 >