Adobe Reader не может открыть загруженный файл в IE6 - PullRequest
1 голос
/ 13 мая 2010

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

Это отлично работает в IE8 и Firefox, но не работает в IE6, когда Adobe Reader выдает сообщение «произошла ошибка при открытии этого документа. Этот файл не найден» *

Если я сначала сохраню файл на диск, то он нормально откроется в Reader.

Я дал файлу простое короткое имя файла без пробелов, поэтому не уверен, что еще можно попробовать. Любые предложения приветствуются.

Дополнительная информация: PDF создается в коде asp.net с помощью плагина abcpdf

Ответы [ 5 ]

1 голос
/ 19 мая 2010

Действительно ли вам нужна поддержка IE6 на вашей веб-странице? Будет ли правильным решением просто потребовать от пользователей обновления до более поздней версии IE?

IE6 умер два с половиной месяца назад. ( IE6 Похороны )

1 голос
/ 19 мая 2010

Вы пробовали Response.ClearHeaders (); ?

0 голосов
/ 20 мая 2010

Я думаю, что я наблюдал такое самое раздражающее поведение (ошибка) в IE6, и, если я вспомню, причиной ошибки было то, что файл не был сохранен в кеше, а сразу истек / удален. Проверьте следующее:

  1. возвращаете ли вы файл по HTTPS?
  2. проверить заголовки ответа, что-нибудь об истечении срока действия?
  3. возникают ли у вас те же проблемы со статически обслуживаемым файлом (но почти по одному и тому же URL, попробуйте '... / file.pdf' и '... / file.asp' с перенаправлением браузера в / file. PDF)
0 голосов
/ 19 мая 2010

ИМХО, это проблема интерпретации заголовка. Я не очень знаком или не люблю ASP.NET, но, по крайней мере, в PHP вы должны иметь такие:

ob_start(); (* should be equivalent to HttpContext.Current.Response.Buffer = true *)

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=somefile.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//header('Content-Length: ' . filesize($file));

ob_flush(); (* should be equivalent to HttpContext.Current.Response.Flush() *)
** output the pdf contents here

(* header() should be similar to HttpContext.Current.Response.AddHeader() function *)

Обратите внимание, что настройка Content-Length: вместе с вложением content-disposition: может не работать в Safari и IE.

Надеюсь, это поможет ...

0 голосов
/ 13 мая 2010

Возможно из-за установки таймаута в Adobe Reader Activex для IE. Вы отвечаете браузеру с частично законченным документом, затем вашей программе потребовалось некоторое время, чтобы продолжить отвечать на оставшуюся часть документа, а время ожидания Adobe Reader истекло. Попробуйте создать весь PDF-документ, а затем ответьте на запрос http. например в php.

$s = "";
for(int i=0;i<10;i++)
    $s .= "1";
echo #s;

вместо

for(int i=0;i<10;i++)
    echo "1";
...