2011-02-10 4 views
1

У меня есть веб-страница, которая будет использоваться для создания файлов KML с помощью Perl-скрипта. Я хочу, чтобы пользователь добавил некоторые данные в форму, которая будет использоваться в моей perl скрипт. Когда форма отправлена, она запустит скрипт, создаст файл kml, а затем предложит пользователю сохранить файл. Единственная часть, о которой я не уверен, заключается в том, как пользователь может сохранить файл после создания сценария KML. У меня есть запрос скрипта perl, чтобы загрузить или использовать что-либо на странице HTML, чтобы загрузить. Я не уверен, что это лучший способ сделать это.Сохраните файл после запуска скрипта perl на веб-странице

ответ

10

Если у вас есть ссылка или форма для сообщения серверу о создании KML, тогда просто создайте KML и отправьте его обратно в браузер с некоторыми дополнительными HTTP-заголовками. Заголовки, которые вы хотите являются:

  • Content-disposition набор для attachment;filename=whatever.kml, где «whatever.kml» является то, что вы хотите, чтобы файл будет называться.
  • Content-type установлен на application/vnd.google-earth.kml+xml.

Content-disposition должен сообщить браузеру, чтобы загрузить KML вместо того, чтобы пытаться его обработать.

Таким образом, скрипт Perl будет предлагать браузеру запрашивать загрузку.

+0

ОК, я вижу: вот что KML является , –

+0

Когда вы говорите, отправляйте его с некоторыми дополнительными заголовками HTTP, как вы это понимаете? Вы имеете в виду верхние несколько строк фактического файла или отправляете заголовки на фактическую страницу. Я даже не уверен, как отправить файл на страницу. Я просто смог создать файл и сохранить его на хостинге, но это не кажется очень эффективным. – shinjuo

+0

@shinjuo: Perl-скрипт работает на сервере и выполняется с удаленной HTML-страницы, не так ли? Таким образом, вы отправите KML обратно так же, как вы отправляете HTML обратно: напечатайте его (возможно). Информация о том, как вы отправляете данные обратно в браузер и как настроите заголовки HTTP, будет зависеть от того, как размещается сценарий и какая структура используется: старая школа CGI, FastCGI, mod_perl, Catalyst, Dancer, ... –

3

Предполагая, что содержимое файла KML в $ KML, то вы хотите сделать что-то вроде: (? И актуальность Google-земли)

use CGI; 

my $cgi = new CGI; 

print $cgi->header('-Content-disposition' => 'attachment;filename=kml.xml', 
        '-Content-type'  => 'application/vnd.google-earth.kml+xml'); 

print $kml; 
Смежные вопросы