6

我正在尝试将文件直接写入 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 object at 0x045DC540)

有谁知道我在这里做错了什么?

4

1 回答 1

1

看起来你想要这个:

    data = open(sourcedata, 'rb').decode()

它默认为 utf8。另外,我鼓励您在 python3 下运行您的代码,并为您的问题使用适当的语言标签。

于 2017-11-14T18:42:03.943 回答