Обработка загрузки файлов в App Engine (python) - PullRequest
0 голосов
/ 13 августа 2010

Я пытаюсь реализовать решение для загрузки файлов, используя движок приложения и python. То, с чем я борюсь, проверяя, есть ли на самом деле файл, прикрепленный к форме, или нет. Я устанавливаю enctype = "multipart / form-data" и в принципе это работает. Мой обработчик python выглядит так:

fileupload = self.request.POST["content"]

if not fileupload:
    return self.error(400)

Это работает, если нет прикрепленного файла. Однако, если есть прикрепленный файл, он выдает следующую ошибку:

  File "D:\eclipse_dev\workspace\test\src\handlers.py", line 351, in post
    if not fileupload:
  File "C:\Python25\lib\cgi.py", line 633, in __len__
    return len(self.keys())
  File "C:\Python25\lib\cgi.py", line 609, in keys
    raise TypeError, "not indexable"
TypeError: not indexable

Как я могу безопасно проверить наличие загрузки, прежде чем делать что-либо еще в обработчике?

Спасибо за любую помощь.

С уважением, Robin

Ответы [ 4 ]

1 голос
/ 13 августа 2010

Как насчет:

fileupload = self.request.POST["content"]

if fileupload is None:
    return self.error(400)
0 голосов
/ 21 марта 2012

У меня есть небольшое руководство по загрузке файлов в GAE.http://verysimplescripts.blogspot.jp/ Также имеется полностью рабочее решение.

0 голосов
/ 21 марта 2012

Метод self.request.get () App Engine прекрасно обрабатывает POST-данные:

"Объект запроса предоставляет метод get (), который возвращает значения для аргументов, проанализированных в запросе и данных POST."

Попробуйте вместо этого:

def post(self):
  fileupload = self.request.get('content')
  if not fileupload:
    self.error(400)
  else:
    # Proceed normally
0 голосов
/ 17 августа 2010

Ну, у меня это работает, используя:

import cgi
.
.
fileupload = self.request.POST["content"]

if not isinstance(fileupload, cgi.FieldStorage):
   return self.error(400)

Не уверен, что это лучшее решение, но, похоже, оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...