ИЗМЕНИТЬ 2
Похоже, что перемещение тега объекта в Dom является причиной проблемы. Я добавил iframe прямо на страницу, и он отлично работает без проблем.
Однако, когда я перемещаю этот iFrame в модальное диалоговое окно (http://www.ericmmartin.com/projects/simplemodal/) PDF-файл исчезает (тег объекта больше не отображается правильно).
Таким образом, похоже, что это уже не вопрос моего обработчика, а скорее вопрос о том, почему перемещение тега «объект» (или встраивания) в DOM (который находится внутри iFrame) приводит к его «отключению».
Кроме того, когда PDF-файл перемещается из модального диалога обратно в исходное положение, он отображается правильно. Так что, возможно, мне стоит больше сосредоточиться на самом модальном диалоге.
Мысли? Спасибо за ваши предложения.
ИЗМЕНИТЬ 1
Итак, я сделал некоторые модификации для тестирования.
У меня есть iframe для вывода тега объекта для запросов PDF вместе с серверным временем.
Response.AddHeader("content-type", "text/html");
WebClient client = new WebClient();
Response.Write("<html><head></head><body><h1>"+ DateTime.Now.ToString() + "</h1><object height='100%' width='100%' name='plugin' data='" + Request.Url.ToString() + "&embed=true' type='application/pdf' /></body></html>");
Response.Flush();
Response.Close();
Response.End();
Теперь я правильно получаю страницу с текущим временем, но объект отображает PDF-файл только в первый раз после публикации страницы aspx. Значит, это какая-то проблема с кешированием? За исключением того, что объект ничего не загружает (даже ранее загруженный PDF-файл).
Если щелкнуть правой кнопкой мыши по iframe и обновить страницу, объект загрузится нормально. (То же самое верно, если я использую тег для встраивания).
Исходный вопрос
Я знаю, что по этому поводу много вопросов ...
- потоковая передача данных PDF через страницу ASPX
- Сервер создан PDF-файл не отображается в IFrame на странице aspx на некоторых (но не на всех) ПК
- Отображение документа PDF на странице ASP.net
Но им либо не ответили, либо ответ не сработал.
Окружающая среда
- .Net 4
- Adobe 9.3.4
- IIS 5.1
- XP sp3
- VS 2010
- IE 8.0.6001.18702
Фон
PDF-файлы, которые я транслирую, поступают из репозитория хранилища, где файлы не имеют расширений (это сделано в целях безопасности). Я ищу файл в базе данных и передаю его обратно клиенту с помощью следующего кода:
Response.Clear();
WebClient client = new WebClient();
Byte[] buffer = client.DownloadData(sPath);
Response.AddHeader("content-length", buffer.Length.ToString());
Response.AddHeader("content-disposition", "inline;filename=" + fileName);
Response.AddHeader("expires", "0");
Response.AddHeader("Content-Type", "application/pdf"); //this is usually dynamic to support other types (doc, xls, txt, etc.)
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
Response.Close();
Response.End();
Это работает для всех типов файлов (doc, txt, xls, html) при использовании непосредственно в браузере или в iframe (отображается как модальное всплывающее окно) за исключением pdf strong > файлы. Они не работают надежно при доступе через iframe, но отлично работают при доступе непосредственно в браузере.
Единственный раз, когда это работает, - это когда я впервые запрашиваю документ после публикации страницы aspx, которая обслуживает эти файлы. Все последующие обращения возвращают пустую страницу (даже из новых вкладок или окон браузера). Firefox всегда надежно отображает PDF-файл.
Попытки решения
Я пробовал различные способы потоковой передачи файла:
Response.TransmitFile(sPath);
Response.WriteFile(sPath);
//As well as some others
Я пробовал добавить .pdf к параметру в конце запроса
http://www.myurl.aspx?File=test.pdf
Я пробовал сделать URL-адрес уникальным, добавив отметку времени
http://www.myurl.aspx?File=test.pdf&Unique=Friday__September_17__2010_12_02_16_PM
Не предпринималось
Я читал о том, что сжатие IIS вызывает проблемы, но это было для более новой версии IIS.
Не пробовал использовать тег embed, так как хотел бы по возможности придерживаться iFrame (его использует существующая инфраструктура).
Любая помощь будет принята с благодарностью !!!
Спасибо.