【发布时间】:2017-11-07 10:38:33
【问题描述】:
我想从电子邮件中提取附件并将其保存到我的新 S3 存储桶中。到目前为止,我已经配置了 AWS Simple Email Service 来拦截传入的电子邮件。现在我有一个 AWS lambda python 函数,它在 S3 Put 上触发。
在此之前它正在工作。但是我的 lambda 给出了错误消息:“[Errno 2] 没有这样的文件或目录:'abc.docx': OSError”。我看到 S3 的原始电子邮件中提到了名为 abc.docx 的附件。
我认为问题出在我的上传文件中。你能帮我看看吗?
请在下面找到我的代码的相关部分。
s3 = boto3.client('s3')
s3resource = boto3.resource('s3')
waiterFlg = s3.get_waiter('object_exists')
waiterFlg.wait(Bucket=bucket, Key=key)
response = s3resource.Bucket(bucket).Object(key)
message = email.message_from_string(response.get()["Body"].read())
if len(message.get_payload()) == 2:
attachment = msg.get_payload()[1]
s3resource.meta.client.upload_file(attachment.get_filename(), outputBucket, attachment.get_filename())
else:
print("Could not see file/attachment.")
【问题讨论】:
-
您可以尝试将附件下载到 Lambda 中的 /tmp 目录,然后上传到 S3。
-
事实上我正在尝试,现在它似乎工作了。非常感谢您的帮助。以下代码有助于解决问题。open('/tmp/newFile.docx', 'wb').write(attachment.get_payload(decode=True)) s3r.meta.client.upload_file('/tmp/newFile.docx ', outputBucket, attachment.get_filename())
标签: amazon-web-services amazon-s3 aws-lambda boto3