|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrew Velikoredchanin 2:5026/29 20 Jan 2004 16:26:52 To : dmkochkin@portobello.ie Subject : как получить сформированный файл с сервера ? -------------------------------------------------------------------------------- Вторник Январь 20 2004, dmkochkin@portobello.ie пишет к Dmitry A. Nikitin: d> Помогите начинающему перловоду плиз. Есть репорт который формируется d> перловым скриптом и разглядывается юзером в броузере. Все-бы ничего, но d> если d> юзер возжелает получить этот репорт в виде таблицы в экселе, как быть? d> Предполагаю нужно сделать некую ссылку каковая сформирует этот-же/такой-же d> репорт в файл и передаст юзеру этот файл, т.е. чтобы нажав ссылочку он d> получил диалог открыть/сохранить на диск. Однако как это сделать не знаю. Тут скорее по другому имеет смысл сделать. 1. По линку запускается твой скрипт и формирует файл на диск. 2. В этом-же скрипте после формирования файла выдаешь заголовок типа print "Content-Type: application/octet-stream\n"; print "Content-Disposition:ttachment; filename=tvoe_ima_faila.xls\n\n"; 3. Открываешь файл и напрямую выдаешь его на стандартный вывод. Все. При нажатии на линк файл будет формироваться и выдваться на скачивание. Броузер при этом спросит куда сохранять файл. d> Кстати тут проблема еще и в том, чтобы разные люди работающие с этим d> отчетом, получали свой отчет, а не запрошенный соседом. Т.е. либо d> формировать файл на диске, но с неким идентификатором привязанным к d> юзерской Все просто. Т.к. и формирование и скачивание идет в одной процедуре, имя файла можешь делать с привязкой к pid - в перле это переменная $$. d> сессии или как-то еще. В общем я полагаю проблема из разряда FAQ, буду d> благодарен если ссылку на этот FAQ или еще какие документы кинете, а еще d> лучше примерчики до кучки. Ключ от квартиры с деньгами приветствуется , но d> необязателен =)) Вот тебе и ключь от квартиры с деньгами: :) $r->content_type($mimetype.'; name='.$filename); $r->header_out('Content-Disposition', $disposition.'; filename='.$filename); $r->send_http_header; open(my $pg, "<".$filepath); binmode $pg; my $l = 1; my $buf = ''; while (defined($l) && ($l > 0)) { $l = read($pg, $buf, 1024); $r->print($buf); }; close($pg); exit; Это реально работающий из под mod_perl кусок кода. Вывод заголовков замени на вышеприведенные print-ы с нужными значениями и все должно заработать. С уважением, Andrew. --- GoldED+/LNX 1.1.4.7 * Origin: (2:5026/29) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/12171400d205e.html, оценка из 5, голосов 10
|