我试图用我的GAE python应用程序获取s3(使用boto)设置来存储用户上传的图片。目前,我得到以下错误:将图片上传到S3(boto + GAE)
File "/Users/phyzikz/project/boto/s3/key.py", line 936, in set_contents_from_file spos = fp.tell()
AttributeError: 'str' object has no attribute 'tell'
我在为什么这种情况正在发生亏损 - 上传应该是一个PNG文件。下面是使上传代码:
class Settings(Handler):
def get(self):
self.render('settings.html')
def post(self):
image = self.request.get('image')
if image:
connection = S3Connection('<ak>','<sak>')
bucket = connection.create_bucket('<s3bucket>')
k = Key(bucket)
k.key = '/pictures/users/'+ str(self.user.key().id())
k.set_contents_from_file(image)
如果有帮助,同时调试它与替代set_contents_from_string set_contents_from_file(图)(“一些字符串”),当工作精美。我必须错过简单的东西。这里的HTML:
<form method='post' action='/settings' enctype='multipart/form-data'>
<input type='file' name='image'>
<input type='submit'>
</form>
免责声明:我是新来的Python和SO(这是我的第一个问题!)所做的任何修改,以提高问题的措辞,如果必要,将不胜感激。
谢谢蒂姆,这工作!对其他人来说,值得注意的是,在尝试这个之后,我发现它也可以在不使用StringIO的情况下使用'k.set_contents_from_string(image)'。 – phyzikz
@phyzikz:它不适用于** k.set_contents_from_string(image)**,在s3上传后,您可以看到对象的大小以字节为单位,因为它只包含字符串...所以它不值得 – Shashank