2015-01-06 3 views
2

у меня есть это в моем коде:Как передать загруженный файл на amazon s3?

size=128,128 
@app.route('/',methods=['GET','POST']) 
def upload(): 
     print request.method 
     if request.method == 'POST': 
       file = request.files['image'] 
       im = Image.open(file) 
       im.resize(size) 
       im.save("test.png","PNG") 
       f=open("test.png",'r') 
       conn = tinys3.Connection('AKIAI2GPQ','fAQxDLbvZcqhXvjd',tls=True)  
       conn.upload(im,f,"snappie.watermarks") 
       print "got file" 
       return redirect("https://www.google.com") 
     return render_template('index.html') 

надеюсь, вы можете видеть, что я пытаюсь обрабатывать загрузку файлов из request.files, изменить его размер, а затем загрузить, что амазонки s3. Однако сейчас его повесили на линии conn.upload(im,f,"snappie.watermarks").

Это ошибка:

File "/home/alex/snappie/web/server.py", line 25, in upload 
conn.upload(im,f,"snappie.watermarks") 
File "/usr/local/lib/python2.7/dist-packages/tinys3/connection.py", line 152, in upload 
return self.run(r) 
File "/usr/local/lib/python2.7/dist-packages/tinys3/connection.py", line 233, in run 
return self._handle_request(request) 
File "/usr/local/lib/python2.7/dist-packages/tinys3/connection.py", line 255, in _handle_request 
return request.run() 
File "/usr/local/lib/python2.7/dist-packages/tinys3/request_factory.py", line 147, in run 
headers['Content-Type'] = self.content_type or mimetypes.guess_type(self.key)[0] or 'application/octet-stream' 
File "/usr/lib/python2.7/mimetypes.py", line 298, in guess_type 
return _db.guess_type(url, strict) 
File "/usr/lib/python2.7/mimetypes.py", line 114, in guess_type 
scheme, url = urllib.splittype(url) 
File "/usr/lib/python2.7/urllib.py", line 1074, in splittype 
match = _typeprog.match(url) 
TypeError: expected string or buffer 

Видимо его возникли проблемы с одним из этих 3-х аргументов, но я не уверен, какой из них? Я также не уверен, что правильно обрабатываю файл. Мне нужно сохранить изображение, а затем снова открыть его, чтобы загрузить его на amazon s3? Я делаю это, потому что все примеры tinys3 делают это, но мой файл уже открыт, возможно, его избыток?

ответ

0

Похоже, что ваш аргумент изображения может быть замешан. Вот подпись мы хотим:

conn.upload(key, local_file, bucket) 

tinys3 expects a string value for the key и открытый файл-подобный объект для local_file. Попробуйте следующее:

conn.upload("test.png", f, "snappie.watermarks") 
Смежные вопросы