2013-11-20 3 views
2

У меня есть форма HTML, позволяющая загружать файлы. Мне нужно отправить загруженный файл по электронной почте. Я следую за классом запроса Google appengine example.Получить загруженное имя файла с помощью класса запросов App App

from google.appengine.ext import webapp 
    from google.appengine.api import mail 

    class MyRequestHandler(webapp.RequestHandler): 
     def get(self): 
      self.response.out.write(''' 
      <html> 
      <body> 
       <form method="post"> 
       <p>File: <input type="file" name="upload" /></p> 
       <p><input type="submit" /></p> 
       </form> 
      </body> 
      </html> 
      ''') 

     def post(self): 
      uploaded_file = self.request.get("upload") 
      uploaded_name = "file.doc" 
      message = mail.EmailMessage(sender="Me <[email protected]>", 
         subject="Email from me") 
      message.to = "Me <[email protected]>" 
      message.body = "See attached file." 
      message.attachments = [(uploaded_name, uploaded_file)] 
      message.send() 

Приведенный выше код работает. Мне нужно заменить hardcoded имя файла (file.doc) в файле message.attachments с фактическим именем загруженного файла. У меня есть два вопроса:

  1. Как получить имя загруженного файла из класса Webapp Request?
  2. Где я могу найти документацию, описывающую, как это сделать? Я сделал кучу поиска и не могу найти справочные материалы или примеры.

UPDATE: Похоже решение:

if uploaded_file != "": 
    uploaded_name = self.request.params["upload"].filename 

... как вывешено here.

ответ

1

Вместо того, чтобы идти self.request.get("upload"), попробуйте изучить self.request.POST["upload"] dict.

В частности, self.request.POST['upload'] вернет экземпляр cgi.FieldStorage. Атрибут, который вы ищете, - filename. Также интересны mimetype - и, конечно, data.

Для получения полной информации о загрузке приложений ознакомьтесь с this ancient post в блоге Nick Johnson.

Чтобы посмотреть, как работает запрос данных webapp2, обратитесь к this portion из webapp2 docs.

Смежные вопросы