从s3存储桶将zip文件上传到FTP位置时出现错误。在这里,我使用的是公共FTP,我们可以使用匿名FTP。
请找到以下代码
s3 = boto3.resource('s3')
print("Loading the function")
def lambda_handler(event, context):
ftp = ftplib.FTP("speedtest.tele2.net")
ftp.login()
ftp.cwd("/upload")
print(event)
src_bucket = event['Records'][0]['s3']['bucket']['name']
print("Source Bucket name:",src_bucket)
dest_bucket= "dest-bucket-name-here"
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
filename= ntpath.basename(key)
print('Received file :{} and fullpath location: {}'.format(filename,key))
copy_source = {'Bucket': src_bucket,'Key': key}
bucket = s3.Bucket(dest_bucket)
ftp.storbinary("STOR " + filename, open(copy_source, 'r')) # error is as mentioned in title.
预期的输出:文件应上载到FTP路径。 (由于它是用于测试的公共FTP,一旦上传的文件将被speedtest自动删除。)
答案 0 :(得分:0)
ftp.storbinary期望像字符串一样的file object
作为输入,但是您将其传递给字典copy_source = {'Bucket': src_bucket,'Key': key}
,因此错误expected str, bytes or os.PathLike object, not dict: TypeError
提供正确的文件名(我猜这里filename= ntpath.basename(key)
,代码应该没问题。
所以最后一行可能会更改为
ftp.storbinary("STOR " + filename, open(filename, 'r'))