Лучше всего для этого использовать mod_rewrite
IE берет имя файла из ссылки, поэтому и нужно дать ему "правильную" ссылку.
А конкретный файл подкладывать под это "виртуальное" имя реврайтом.
Получится что-то вроде
path/dir/file.txt =>>(rewrite)=>>
export.htm?filename=somefile.txt&object=someobject
Экзешник (.txt, .xls или что там у Вас) качается нормально во всех случаях.
Если почитать доку к mod_rewrite, там написано, что дополнительные параметры
вызова можно прятать в ... именах каталогов (реврайту все равно - он их
оттуда регекспом выскребет, а эксплорер имеет "чистое" имя), потому что
иначе в окне загрузки файла пишется всякая лабуда типа "Loading 48% of
export.html?&*#(*)(**#$()".
Одна тонкость в том, что, если в ссылке присутствуют параметы (как в Вашем
случае) перед регекспом они переносятся из URL в переменную окружения
QUERY_STRING, поэтому приходится иногда работать и с переменными окружения,
как это сделано в примере ниже:
RewriteRule ^/files/([^/]*)(.*) /cgi-bin/files.cgi?%{QUERY_STRING}&file=$1$2
[PT]
Здесь все ссылки на файлы в директории files перебрасываются на скрипт,
который на самом деле их отдает. Скрипт при этом вызывается с частью
параметров из регекспа, а с частью - из URLа.
В IE есть еще один глюк, на который можно нарваться - при REFRESH страницы
он обновляет содержимое, но не Content-type. Обычно с этим сталкиваешься при
отладке - получив один раз Content-type = text/html, дальше любые бинарии
эксплорер по F5 будет "дампить" на рабочий экран не зависимо от заголовков.
С уважение, Арсений.
----- Original Message -----
From: "Sergey Rusakov" <ras@azot.kuzbass.net>
To: <apache-talk@lists.lexa.ru>
Sent: Friday, July 20, 2001 10:17 AM
Subject: [apache-talk] File download
> Привет всем. Вот такой практический вопрос.
> Есть некое хозяйство, работающее под HTML::Mason, в общем, это mod_perl
> почти в чистом виде. Мне надо сделать "Экспорт" данных из базы. При этом
> должно открыться окно Download file в IE.
> Вот тут у меня некоторое непонимание процесса.
> 1. Собственно экспорт делается из ссылки на export.htm. Там я выставляю
> Content-Disposition => attachment; filename=$filename
> но IE упорно предлагает сохранить под именем export.htm. Причем если
сказать
> "открой", а не "сохрани", то он задает этот вопрос еще раз! При этом
второй
> раз уже с правильным именем файла.
>
> 2. В самом начале экспорта делаю
> $r->content_type("application/octet-stream");
> Это вызывает периодически такую проблему: IE вместо моего экспортного
файла
> сохраняет ту страницу, откуда он собственно на export.htm ссылался.
>
> Может быть проще все сделать сначала и правильно? Тогда вопрос: как это
> правильно сделать, если я вызываю
> export.htm?filename=somefile.txt&object=someobject
>
>
> ?
>
> Сергей.
>
>
>
>
>
============================================================================
=
> = Apache-Talk@lists.lexa.ru mailing list
=
> Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to
quit.
> = Archive avaliable at http://www.lexa.ru/apache-talk
=
>
>
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =