Обслуживание exe для Firefox из aspx. Firefox загружает его как «Контент». Неверное имя файла и без расширения - PullRequest
3 голосов
/ 28 марта 2011

Я пытаюсь сервер exe для Firefox со страницы aspx. Страница aspx обрабатывает заголовки, и страница запускается нашим Flex GUI. Flex правильно запускает ссылку для всех браузеров (включая Firefox), поэтому я уверен, что проблема не в этом.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь загрузить файл из Firefox, FF скачивает файл нормально, но называет его «Контент». Он не имеет расширения и неверное имя файла. Все остальные браузеры загружают его с именем файла, которое я указал на странице aspx, и все они имеют расширение .exe. Я должен отметить, что если я переименую файл «Content» в «Content.exe», он будет работать правильно.

Ниже приведен код, который я использую на своей странице aspx -

   protected void Page_Load(object sender, EventArgs e) {
        string fileName = Request.QueryString["file"];
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(Server.MapPath(fileName));

        Response.Clear();
        if ( fileName.EndsWith(".exe") ) {
            Response.ContentType = "application/exe";
        }
        else {
            Response.ContentType = "application/octet-stream";
        }
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
    }

Любые идеи и / или предложения о том, почему это не работает правильно в Firefox?

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Я просто запустил точный код, который вы упомянули, без части графического интерфейса Flex, на простом веб-сайте asp.net, и он отлично работает на моем Firefox, я получаю имя файла с расширением.

Я использую Firefox версии 3.6.16.

Вот несколько вещей, которые вы можете попробовать:

  1. Попробуйте запустить тот же код без Flex GUI, часть
  2. Если это все еще не работает, проверьте версию Firefox
  3. Как подсказал Джон, используйте Fiddler и понаблюдайте, если что-то не так в заголовках ответа

Еще один момент, может быть, это только для целей тестирования, так как разрешение загрузки файлов таким способом может быть угрозой безопасности, так как даже если URL вызывается из Flex GUI, люди могут отслеживать трафик с помощью fiddler или wireshark, а затем использовать его для загрузки любого файла, который они хотят. Например, они могут загрузить web.config и просмотреть строку подключения или загрузить код.

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

0 голосов
/ 28 марта 2011

Вам не нужно добавлять длину контента самостоятельно, так как Response.WriteFile сделает это при необходимости.Получающиеся в результате дублирующие заголовки неверны.

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

Наконец, зарегистрированного типа содержимого «application / exe» не существует, для исполняемых файлов следует использовать «application / octet-stream».Возможно, поскольку Firefox считает его «неправильным» для файлов .exe, он не использует это расширение.

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

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