我正在使用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客户端连接上移了,以为可能正在上载,但是我仍然以相同的顺序遇到相同的错误。 “处理”是我的处理函数。
答案 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)
您应该使用存储桶的名称而不是存储桶对象。