2010-09-01 1 views
3

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

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

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

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

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

ответ

10

Взятые непосредственно из 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 заголовок для предоставления имени файла клиенту.

+0

Да, да, это то, что я искал. Это фиксированная моя проблема:

плавник = открыт (zOutFilename, "Р.Б.") размер = os.path.getsize (zOutFilename) start_response ("200 OK", [('Content-Type', 'приложение/почтовый индекс'), ('Content-length', str (size)), ('Content-Disposition', 'attachment; filename =' + finalModelName + '. Zip')]) # вернуть весь файл if 'wsgi.file_wrapper 'in environ: return environ [' wsgi.file_wrapper '] (fin, 1024) else: return iter (lambda: fin.read (1024),' ')

madigan

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

  • Нет связанных вопросов^_^