我需要将数据从 FTP 服务器发送到 S3 存储桶,而不将文件保存到本地驱动器。在互联网上,我发现我们可以使用io.BytesIO()
作为缓冲区。但我的代码失败了:
error_perm: 500 语法错误,命令无法识别。
剧本:
ftp = ftplib.FTP(ipaddr)
ftp.login(usr,pswd)
ftp.cwd(folder)
myfile = io.BytesIO()
buffer = ftp.retrbinary(filename, myfile.write)
myfile.seek(0)
s3_resource.Object(bucket_name, folder + "/" + filename).put(Body=buffer)
ftp.quit()
有人可以帮我吗?
您的代码至少存在两个问题:
-
您当前的问题是,您缺少 FTP 命令(RETR
) 在里面Connection.retrbinary https://docs.python.org/3/library/ftplib.html#ftplib.FTP.retrbinary称呼。这就是为什么你得到“error_perm:500 语法错误,命令无法识别。”。它应该是:
ftp.retrbinary("RETR " + filename, myfile.write)
-
一旦你解决了这个问题,你会发现内容不会到达 S3,因为你正在传递 FTP 响应(buffer
),而不是下载的内容(myfile
)到 S3,正如 @dreamca4er 评论的那样。它应该是:
s3_resource.Object(bucket_name, folder + "/" + filename).put(Body=myfile)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)