|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Yury Kopyl 2:5020/400 20 Jan 2004 18:08:25 To : Andrew Velikoredchanin Subject : Re: как получить сформированный файл с сервера ? -------------------------------------------------------------------------------- Andrew Velikoredchanin -> "как получить сформированный файл с сервера ?" : AV> Пpивет, dmkochkin@portobello.ie ! AV> Вторник Январь 20 2004, dmkochkin@portobello.ie пишет к Dmitry A. AV> Nikitin: d>> Помогите начинающему перловоду плиз. Есть репорт который d>> формируется перловым скриптом и разглядывается юзером в броузере. d>> Все-бы ничего, но если юзер возжелает получить этот репорт в виде d>> таблицы в экселе, как быть? d>> Предполагаю нужно сделать некую ссылку каковая сформирует d>> этот-же/такой-же репорт в файл и передаст юзеру этот файл, т.е. d>> чтобы нажав ссылочку он получил диалог открыть/сохранить на диск. d>> Однако как это сделать не знаю. AV> Тут скорее по другому имеет смысл сделать. AV> 1. По линку запускается твой скрипт и формирует файл на диск. AV> 2. В этом-же скрипте после формирования файла выдаешь заголовок типа AV> print "Content-Type: application/octet-stream\n"; AV> print "Content-Disposition:ttachment; AV> filename=tvoe_ima_faila.xls\n\n"; AV> 3. Открываешь файл и напрямую выдаешь его на стандартный вывод. AV> Все. При нажатии на линк файл будет формироваться и выдваться на AV> скачивание. AV> Броузер при этом спросит куда сохранять файл. d>> Кстати тут проблема еще и в том, чтобы разные люди работающие с этим d>> отчетом, получали свой отчет, а не запрошенный соседом. Т.е. либо d>> формировать файл на диске, но с неким идентификатором привязанным к d>> юзерской AV> Все просто. Т.к. и формирование и скачивание идет в одной процедуре, AV> имя файла можешь делать с привязкой к pid - в перле это переменная AV> $$. d>> сессии или как-то еще. В общем я полагаю проблема из разряда FAQ, d>> буду благодарен если ссылку на этот FAQ или еще какие документы d>> кинете, а еще лучше примерчики до кучки. Ключ от квартиры с деньгами d>> приветствуется , но необязателен =)) AV> Вот тебе и ключь от квартиры с деньгами: :) AV> $r->content_type($mimetype.'; name='.$filename); AV> $r->header_out('Content-Disposition', $disposition.'; AV> filename='.$filename); AV> $r->send_http_header; AV> open(my $pg, "<".$filepath); AV> binmode $pg; AV> my $l = 1; AV> my $buf = ''; AV> while (defined($l) && ($l > 0)) AV> { AV> $l = read($pg, $buf, 1024); AV> $r->print($buf); AV> }; AV> close($pg); AV> exit; AV> Это реально работающий из под mod_perl кусок кода. Вывод заголовков AV> замени на вышеприведенные print-ы с нужными значениями и все должно AV> заработать. вод кусок под mod_perl my $filename="price.xls"; $r->headers_out->set('Content-Disposition'=>"attachment;filename=$filename") ; $r->send_http_header('application/vnd.ms-excel'); tie *XLS => 'Apache'; binmode(*XLS); my $workbook = Spreadsheet::WriteExcel->new(\*XLS); Yury Kopyl aka hrg | http://id.totem.ru | Гордость мешает доходам! --- ifmail v.2.15dev5.1 * Origin: IAC Samara-Internet, Ltd. (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/102775045df1d.html, оценка из 5, голосов 10
|