这个问题已经被问了很多次,但是我的情况略有不同。我正在尝试创建一个Lambda函数,用于创建一个.html文件并将其上传到S3。当文件在磁盘上创建时,它可以像下面这样上传:
boto3.client('s3').upload_file('index.html', bucket_name, 'folder/index.html')
现在我必须在内存中创建文件,为此我首先尝试使用StringIO()。然而,.upload_file
会抛出一个错误。
boto3.client('s3').upload_file(temp_file, bucket_name, 'folder/index.html')
ValueError: Filename must be a string`.
所以我尝试使用.upload_fileobj()
,但是我得到了错误TypeError:需要类似于字节的对象,而不是'str'
所以我尝试使用Bytesio(),它要求我先将str转换为bytes,所以我这样做了:
temp_file = BytesIO()
temp_file.write(index_top.encode('utf-8'))
print(temp_file.getvalue())
boto3.client('s3').upload_file(temp_file, bucket_name, 'folder/index.html')
但现在它只上传一个空文件,尽管 .getvalue()
明确显示它的内部确实有内容。
我做错了什么?