Отключить опцию открытия файла xls в Internet Explorer с сайта? - PullRequest
1 голос
/ 09 февраля 2010

ФОН:

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

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

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

Я доставляю файлы обратно пользователю посредством 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 пытается открыть файл и выбрасывает ... не удалось найти. Проверьте правильность написания имени файла и убедитесь, что местоположение файла указано правильно.

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

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

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

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

X-Download-Options: noopen

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

Но похоже, что проблема, которую вы затрагиваете, не имеет никакого отношения к длине имени файла и все, что связано с заголовками кэширования в ответе. Вы должны убедиться, что ваш файл помечен как кешируемый (например, Cache-Control: private), особенно если вы используете HTTPS. См. Загрузка файла через HTTPS в IE 5.5 / IIS 5.0 для дальнейшего обсуждения.

1 голос
/ 09 февраля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...