В примере 15.27 мы написали сценарий с именем getfile.py — CGI- программу на языке Python, предназначенную для отображения в веб-броузере (или в других программах) любых общедоступных файлов, находящихся на сервере, по запросу с компьютера клиента. Для корректного отображения текстовых файлов в окне броузера он использует заголовок «Content-type» со значением text/ plain или text/html . В описании мы сравнили getfile.py с обобщенным CGI-инструментом загрузки, дополненным возможностью копирования или сохранения.
Хотя это и верно, тем не менее, сценарий getfile.py в первую очередь задумывался как инструмент отображения содержимого файлов, а не как демонстрация возможности загрузки файлов через CGI. Если вам действительно потребуется реализовать непосредственную загрузку файлов через CGI (вместо того, чтобы отображать его содержимое в броузере или открывать в другом приложении), вы можете заставить броузер на стороне клиента вывести диалог сохранения файла, добавив соответствующий заголовок «Content-type» в ответе сценария CGI.
Что делать с файлом, броузеры решают исходя из расширения в имени файла (например, файл с именем xxx.jpg интерпретируется как изображение) или из значения заголовка «Content-type» (например, значение text/html означает файл с разметкой HTML). Используя различные значения MIME в заголовке, можно указать неизвестный броузеру тип данных и тем самым заставить его отказаться от обработки данных. Например, значение application/ octet-stream в заголовке «Content-type» ответа вынудит броузер вывести диалог сохранения файла.
Тем не менее такой подход иногда осуждается, потому что он прячет истинную природу файла, — обычно лучше позволить пользо- вателю/клиенту самому решать, как обрабатывать загружаемые данные, чем принудительно выводить диалог сохранения. Кроме того, этот прием практически не имеет отношения к языку Python — за дополнительной информацией обращайтесь к книгам о CGI или попробуйте выполнить поиск в Веб по фразе «CGI down- load».
16
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011