我想直接将文件写入S3,而不需创建本地文件再上传。
我使用cStringIO在内存中生成了一个文件,但是我不知道如何正确地使用boto3上传它。
def writetos3(sourcedata, filename, folderpath):
s3 = boto3.resource('s3')
data = open(sourcedata, 'rb')
s3.Bucket('bucketname').put_object(Key= folderpath + "/" + filename, Body=data)
以下是我之前使用本地文件的标准boto3方法,没有本地文件就无法使用。如果没有本地文件,会出现以下错误:
coercing to Unicode: need string or buffer, cStringIO.StringO found
。因为内存中的文件(我认为)已经被视为打开状态,所以我尝试将其更改为下面的代码,但仍无法正常工作,在该方法的最后一行上脚本会停滞,但不会报错。
def writetos3(sourcedata, filename, folderpath):
s3 = boto3.resource('s3')
s3.Bucket('bucketname').put_object(Key= folderpath + "/" + filename, Body=sourcedata)
仅供参考,我要写入的值看起来像这样
(cStringIO.StringO 对象位于 0x045DC540)
有人知道我在这里做错了什么吗?