2009-08-13 7 views
7

У меня есть страница aspx с кнопками link, которые запускают javascript, чтобы открыть новую страницу aspx для потоковой передачи файлов в браузер для загрузки пользователями.IE 7 ошибка? - prompt save/open при загрузке файла - C# asp.net 3.5

При разработке и модульном тестировании на XP SP3, IE 7 и FireFox 3.5, используя следующий код (ключ является частью «вложения» в теге Content-Disposition), оба запрашивают диалоговое окно с вопросом, хочу ли я сохранить или откройте документ, который является именно то, что я хочу, чтобы это произошло:

 private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format); 
     Response.ContentType = m_mimeType; 
     Response.BinaryWrite(requestFile); 
     Response.Flush(); 

    } 

Когда я раскрываю это на сервер Windows 2003 и перейдите к одной и той же странице ASPX, FireFox 3.5 правильно просит Save/Open варианта, как ожидается, так как это операция по умолчанию в FF.

Когда я перемещаюсь в IE 7, однако и нажимаю для загрузки, я получаю всплывающее окно, которое видно для 1/8-й вторых вершин ... и исчезает. Нет подсказки для сохранения/открытия.

Если я иду в IE 7 -> Сервис -> Свойства обозревателя -> Безопасность -> Пользовательский уровень -> Загрузки

Автоматические запросы на загрузку файлов отключена. Когда я проверю его, чтобы включить i, вы получите правильное выполнение подсказки Save/Open.

Так что мой вопрос ... кто-нибудь получил работу вокруг этого? Я пробовал кучу вещей, которые люди требуют работы с разными тегами заголовка, такими как кеш, прагма и т. Д. И т. Д. ... ничто из этого не связано с тем, что по умолчанию IE отключил свойство загрузки.

+0

Я пробовал что-то подобное, и он работает в IE7,8. Можете ли вы указать точное значение используемого m_mimeType? –

+0

для тестирования im, используя это как mime и format в списке параметров «application/pdf», «PDF» –

+0

Попробуйте другие, например. application/zip Что-то, что IE7 не может отображать в своем окне. –

ответ

2

Недавно мы столкнулись с идентичной проблемой с нашей реализацией для загрузки сгенерированных отчетов в нашей пользовательской веб-среде. Исследования побудили нас попробовать тот же подход, о котором вы говорили (настройка Content-Disposition).

Проблема связана с IE7 и зонами безопасности. По умолчанию определенные действия ДОЛЖНЫ быть явно инициированы пользователем. Вы можете начать с поиска Understanding and Working in Protected Mode Internet Explorer и About Window Restrictions

0

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

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\""); 
0

Try This

защищен недействительным Button1_Click (объект отправителя, EventArgs е) { Response.ContentType = "применение/PDF"; Response.Clear(); Response.TransmitFile ("test.pdf"); Response.End(); }

+0

Если вы видите в моем примере файл не из файловой системы, его массив байтов im использует BinaryWrite() для записи в браузер. TransmitFile() не будет работать в этом случае, если я не собираю файлы физически в системе. –

1

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

Вы можете попытаться заставить исследователь интернета, добавив

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

до конца Вашего запроса.

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

0

Если нет необходимости открывать новую страницу с помощью javascript, вы можете использовать Response.Redirect() на странице aspx. Это должно открыть диалог сохранения/открытия.