2010-02-09 4 views
1

СПРАВОЧНАЯ ИНФОРМАЦИЯ:Отключить возможность открытия файла xls в Internet Explorer с сайта?

Я создал веб-приложение для клиента, которое позволяет им сохранять файлы excel на сервере.

Когда я впервые создал приложение, я сохранил эти файлы в папке uploads и привязал их непосредственно со страниц в приложении (например, File).

При отражении это было не очень безопасно, поэтому я изменил файл загрузчика, чтобы сохранить файлы выше корня веб-сайта и тем самым предотвратить прямой доступ.

Я доставляю файлы обратно пользователю с помощью файла php 'retriever' (например, File). Файл (после некоторых проверок аутентификации пользователей) выглядит следующим образом:

header("Content-type: application/octet-stream"); 
$_file = $_GET['filename']; 
$sPattern = '/\s*/m'; 
$sReplace = ''; 

$_strippedfile = preg_replace($sPattern, $sReplace, $_file); 
header("Content-Disposition: attachment; filename=".$_strippedfile.""); 
echo file_get_contents('/var/www/uploads/'.$_file); 

ПРОБЛЕМА:

выше все работает отлично, если пользователь не выберет «открытым», а не «сохранить» в Internet Explorer. Excel пытается открыть файл и выбрасывает «... не удалось найти. Проверьте правильность написания имени файла и убедитесь, что местоположение файла верное ».

Я искал эту ошибку, и кажется, что она связана с длиной имени файла (включая путь). К сожалению, путь к временным интернет-файлам не входит в мой контроль, поэтому было интересно, есть ли способ заставить пользователя сохранить файл, а не открыть его? [По-видимому, это можно настроить локально, но a) мои клиенты не очень технические и b) потому что они находятся в корпоративной сети, все права администратора привязаны.]

Любые другие идеи приветствуются.

+0

Я помню, что у меня были проблемы с пробелами в именах файлов и IE, и getg вокруг, заменив их на _underscores. –

+0

Спасибо за быстрый ответ. Кажется, вы правы в отношении специальных персонажей, но интернет-исследователь, кажется, ставит их в себя !? Кажется, он сохраняет файл с дополнительными квадратными скобками, например. myfile [1] .xls в временных интернет-файлах, даже когда я очистил временную папку с интернет-файлами. Я тестировал с помощью firefox, и это сохраняется как myfile.xls. Bizarre. Есть идеи? – Derek

ответ

2

Вы можете предотвратить Открыть файлы в IE8, отправив заголовок

X-Download-Options: noopen

В более ранних версиях, вам необходимо добавить мета-тег DOWNLOADOPTIONS на страницу, которая содержит файл XLS.

Однако, похоже, что проблема, с которой вы сталкиваетесь, не имеет ничего общего с длиной имени файла и все, что связано с заголовками кеширования ответа. Вы должны убедиться, что ваш файл отмечен как кешируемый (например,Cache-Control: частный), особенно если вы используете HTTPS. См. Download file over HTTPS in IE 5.5/IIS 5.0 для дальнейшего обсуждения.

+0

Отсортировано! Вы были правы в настройке контроля кеша. Получено следующее из учебника: // Включить кеширование // секунды, минуты, часы, дни $ expires = 60 * 60 * 24 * 14; header («Pragma: public»); Заголовок («Cache-Control: maxage =». $ Expires); header ('Истекает:'. Gmdate ('D, d M Y H: i: s', время() + $ истекает). 'GMT'); И теперь файлы открываются без проблем. Спасибо! – Derek

1

Я так не думаю. Открытие файла в связанном приложении является базовой функцией, предлагаемой браузером, и на нее нельзя влиять.

Это печально, потому что здесь есть дополнительная проблема с пользовательским опытом. Я открываю файл из Интернета, и Excel позволяет мне его редактировать. Поэтому, когда я его сохраняю, я могу с уверенностью предположить, что изменения возвращаются в Интернет. Правильно? Или, по крайней мере, они не потеряны. Правильно? Правильно? Попробуйте объяснить нетехническому пользователю, который в течение двух часов работал над таким документом, что их работа потеряна.

Но я отвлекся. Возможно, вам захочется поиграть с заголовками загрузки. Мне трудно представить, что файлы Excel невозможно открыть сразу после загрузки.

Можете ли вы попробовать отправить Content-type: application/ms-excel? Или это автоматически откроется и не предложит сохранить?

Кроме того, есть ли в вашем файле какие-либо специальные символы/Umlauts? Slashes? Пространства, упомянутые Цыганским королем? Все это может привести к проблемам при открытии.

+0

Кажется, вы правы в отношении специальных персонажей, но интернет-исследователь, похоже, ставит их в себя !? Кажется, он сохраняет файл с дополнительными квадратными скобками, например. myfile [1] .xls в временных интернет-файлах, даже когда я очистил временную папку с интернет-файлами. Я тестировал с помощью firefox, и это сохраняется как myfile.xls. Bizarre. Есть идеи? – Derek

+0

P.S. Спасибо за быстрый ответ! – Derek

+0

Скобки взяты из файла с тем же именем, который уже существует в папке, taht должен быть o.k. Если нет других специальных символов 'äöü/$ %' и т. Д., Это действительно странно, почему это не сработает ... –

Смежные вопросы