2013-09-10 3 views
0

Я использую эту ссылку в качестве примера для загрузки изображений:Загрузка изображений - Google App Engine + Python

https://gist.github.com/jdstanhope/5079277

Мой HTML-код:

<form action="/upload_image" method="post" id="form1" runat="server"> 
     <div class="fileButtons"> 
     <input type='file' id="imgInp" name="imgInput" accept="image/*"/><br><br> 
     <input type='button' id='remove' value='Remove' /> 
     </div></form> 

main.py:

class SetImage(webapp2.RequestHandler): 
    def post(self): 
     logging.debug("test") 
     id = str(self.request.get('id')) 
     image = self.request.get('imgInput') 

app = webapp2.WSGIApplication([('/upload_image', SetImage), 
           ('/', MainPage)], debug=True) 

Но когда я добавляю изображение, ничего не делается, а консоль журнала не печатает:

logging.debug("test") 
+2

add enctype = 'multipart/form-data' в вашу форму. Кроме того, сообщение, похоже, не делает ничего, кроме назначения значений для id и изображения. Использовать logging.info или простой распечатать – kevin

ответ

0

Что касается вопроса вашего журнала заявления не стрельбы: Уровень журнала по умолчанию для dev_appserver.py является info, который можно переопределить с --dev_appserver_log_level флагом.

Ссылка new dev_appserver documentation.

Чтобы получить доступ к загруженным файлам из POST-запроса multipart/form-data, webapp2 documentation states, они доступны в request.POST.

1

Рекомендуемый способ загрузки изображений в GAE осуществляется с помощью blobstore.

Вот краткая Разбивка документа, чтобы помочь вам достичь этого быстро:

Импорт:

import os 
import urllib 
import webapp2 

from google.appengine.ext import blobstore 
from google.appengine.ext.webapp import blobstore_handlers 

Подавать форму HTML. эта форма выполняет POST для GAE с выбранными данными файлов:

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     upload_url = blobstore.create_upload_url('/upload') 
     self.response.out.write('<html><body>') 
     self.response.out.write('<form action="%s" method="POST" 
       enctype="multipart/form-data">' % upload_url) 
     self.response.out.write("""Upload File: 
       <input type="file" name="file"><br> <input type="submit" 
       name="submit" value="Submit"> </form></body></html>""") 

Добавить обработчик для получения данных POST (бинарное содержимое файла). последняя строка в этой функции, чтобы перенаправить ответ на место, откуда файл может быть загружен:

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
     # 'file' is file upload field in the form 
     upload_files = self.get_uploads('file') 
     blob_info = upload_files[0] 
     self.redirect('/serve/%s' % blob_info.key()) 

Добавить обработчик служить изображение, которое вы загруженное с помощью UploadHandler описано выше:

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler): 
    def get(self, resource): 
     resource = str(urllib.unquote(resource)) 
     blob_info = blobstore.BlobInfo.get(resource) 
     self.send_blob(blob_info) 

И, наконец, определите маршруты для приложения:

app = webapp2.WSGIApplication([('/', MainHandler), 
          ('/upload', UploadHandler), 
          ('/serve/([^/]+)?', ServeHandler)], 
          debug=True) 
Смежные вопросы