Возврат файла в запрос GET WSGI - PullRequest
3 голосов
/ 02 сентября 2010

Я новичок в WSGI на Python;но есть сервер Windows, на котором установлен isapi_wsgi.У меня также есть скрипт, который обрабатывает все мои запросы GET и работает отлично.Дело в том, что кто-то отправляет мне запрос, и мне нужно вернуть zip-файл запрашивающей стороне.Следующий код находится в моем обработчике GET, и он работает, но не похоже на правильный способ вернуть zipfile:

  # open zip file return it
  fin = open(zOutFilename, "rb")
  start_response( "200 OK", [('Content-Type', 'application/zip')])
  return fin.read()

Дело в том, что вы возвращаете «поток» - что означаетвы теряете имя файла (браузер просто называет его именем запроса GET), и оно кажется ужасно медленным.

Есть ли лучший способ вернуть файл для загрузки с помощью wsgi, чем этот метод?

Заранее спасибо

1 Ответ

11 голосов
/ 02 сентября 2010

Взят непосредственно из PEP 333 :

if 'wsgi.file_wrapper' in environ:
    return environ['wsgi.file_wrapper'](filelike, block_size)
else:
    return iter(lambda: filelike.read(block_size), '')

Также вам, вероятно, нужен заголовок Content-Disposition для предоставления имени файла клиенту.

...