Как предотвратить загрузку вместо сохранения в IE? - PullRequest
1 голос
/ 21 октября 2008

Когда вы создаете ссылку на исполняемый файл, предназначенный для загрузки (например, update.exe), на веб-странице IE7 дает пользователю возможность «Выполнить» или «Сохранить». Я не хочу, чтобы пользователи запускали файл обновления, который они должны загружать.

Можно ли отключить опцию «Сохранить» в диалоговом окне, отображаемом IE, или даже принудительно загрузить автоматически.

Ответы [ 9 ]

3 голосов
/ 21 октября 2008

РЕДАКТИРОВАТЬ: Извините, я думал, что этот кусок кода будет самоочевидным. Учитывая, что ОП пометил его как ASP.NET, я думал, что мы находимся в контексте ASP.NET.

Это может идти в прокси-файле, который связан с файлом, а не напрямую с файлом .exe. Затем прокси-файл отправляет файл .exe и заставляет (пытается убедить) браузер принудительно загрузить файл, а не запускать его напрямую.

HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("Content-disposition", "attachment; filename=filename.exe");
HttpContext.Current.Response.AddHeader("Content-length", contentLength);
HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.TransmitFile(filePath);
2 голосов
/ 21 октября 2008

Нетехнический способ сделать это - вставить инструкции по загрузке в виде изображения соответствующего диалогового окна, с дружественным кружком вокруг кнопки сохранения и текстом, который говорит пользователю нажать на кнопка Сохранить. Это оставляет все для пользователя и ничего для программиста. При попытке достичь таких вещей, проблема № 1 проверяет, действительно ли это работает. Различий в конфигурациях так много, что тестирование во всех ситуациях становится нереальным, и в этом случае ни одно решение не может быть гарантировано работающим, а это означает, что любое затраченное время / деньги являются пустой тратой.

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

2 голосов
/ 21 октября 2008

Поведение при загрузке встроено в браузер. У пользователя должен быть выбор. Какая разница, в любом случае? Когда пользователь выбирает «Выполнить», файл загружается во временное местоположение и выполняется так, как если бы пользователь скачал и запустил его вручную.

1 голос
/ 21 октября 2008

Попробуйте добавить эквивалент на используемом вами языке программирования:

response.setHeader ("Content-Disposition", "attachment; filename = ...">

к файлу при обслуживании с сервера.

РЕДАКТИРОВАТЬ: заменить многоточие (...) на файл, который вы хотите, чтобы они загрузили.

РЕДАКТИРОВАТЬ 2: Чтобы уточнить, не сервер fred.png напрямую, вместо этого иметь fred.php и в этом файле php, вы генерируете пользовательскую информацию заголовка (которая включает Content-Disposition) и передаете ее, плюс fred.png содержимое, обратно к клиенту.

0 голосов
/ 03 февраля 2011

Схожий характер с ответом Марка С. Расмуссена.

Вам, скорее всего, понадобится заголовок расположения контента. Это позволяет вам предложить пользователю сохранить файл. Сказав это, это до браузера пользователя.

http://www.jtricks.com/bits/content_disposition.html

0 голосов
/ 21 октября 2008

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

0 голосов
/ 21 октября 2008

Вы можете переименовать файл, который вы обслуживаете, во что-то вроде update.exe.safe, но тогда у вас возникнет проблема с тем, чтобы пользователи правильно переименовали файл, чтобы они могли дважды щелкнуть по нему и что-то произошло.

0 голосов
/ 21 октября 2008

Единственный способ, о котором я могу думать, - это через групповую политику, если она определяет опцию для этого. Это было бы жизнеспособным решением, только если у вас есть контроль над компьютерами конечных пользователей, поэтому в среде, объединенной с интранетом / доменом.

Как правило, в IE / HTM / HTTP ничего нельзя использовать для управления пользовательским интерфейсом, предоставляемым конечному пользователю. Вы могли бы рассмотреть некоторые альтернативные решения / обходные пути, хотя:

  • Доставка исполняемого файла через ActiveX, который загружает сам файл и, следовательно, требует его сохранения.
  • Доставить конечный исполняемый файл через загрузочную оболочку, которая функционирует независимо от выбранного режима Run / Save и выполняет загрузку самого финального исполняемого файла.

Обе опции практически идентичны, но для одного нужен ActiveX и только для IE, а для другого нет.

0 голосов
/ 21 октября 2008

Я просто догадываюсь, но вы могли бы заставить поле заголовка типа контента что-то помимо того, что по умолчанию. Я видел "application / x-msdownload", которая может делать то, что вы хотите.

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