Python Boto3 Lambda上传临时文件

时间:2018-11-21 01:42:14

标签: amazon-s3 aws-lambda boto3

我正在使用Lambda压缩S3存储桶中的图像文件。我可以在Lambda中下载图像,将其压缩为新文件。我正在尝试将新文件上传到相同的S3存储桶中,并且不断遇到以下错误:

module initialization error: expected string or bytes-like object

这是要上传的代码:

s3 = boto3.client('s3')
s3.upload_file(filename,my_bucket,basename)

以下是其中一项测试上传的日志:

Getting ready to download Giggidy.png
This is what we're calling our temp file: /tmp/tmp6i7fvb6z.png
Let's compress /tmp/tmp6i7fvb6z.png
Compressed /tmp/tmp6i7fvb6z.png to /tmp/tmpmq23jj5c.png
Getting ready to upload /tmp/tmpmq23jj5c.png
File to Upload, filename: /tmp/tmpmq23jj5c.png
Mime Type: image/png
Name in Bucket, basename: tmpmq23jj5c.png
START RequestId: e9062ca9-ed2c-11e9-99ee-e3a40680ga9d Version: $LATEST
module initialization error: expected string or bytes-like object
END RequestId: e9062ca9-ed2c-11e9-99ee-e3a40680ga9d

如何在Lambda上下文中上传文件?

更新:我已将代码上传到要审核的内容:https://gist.github.com/kjenney/068531ffe01e14bb7a2351dc55592551

我也将脚本中的boto3客户端连接上移了,以为可能正在上载,但是我仍然以相同的顺序遇到相同的错误。 “处理”是我的处理函数。

1 个答案:

答案 0 :(得分:3)

您的问题是这一行:

client.upload_file(filename,my_bucket,basename)

在文档中,格式为:

client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')

请注意,存储桶名称是字符串。这就是为什么错误提示期望的字符串

但是,您的代码将my_bucket设置为:

my_bucket = s3.Bucket(bucket)

您应该使用存储桶的名称而不是存储桶对象