Принудительно скачать PDF в ASP.NEt с IE - PullRequest
3 голосов
/ 07 апреля 2011

Итак, я использую немного кода для принудительной загрузки моего проекта на базе ASP.Net.Этот фрагмент кода работает в Firefox и Chrome, но не в IE по какой-то странной причине.Еще более странно, что изначально он работал во всех трех, а недавно перестал работать в IE.Ниже приведен код, который я использовал, пожалуйста, дайте мне знать, если необходимо внести какие-либо изменения или с чем может быть проблема.

 string path = MapPath(fname);
    string name = Path.GetFileName(path);
    string ext = Path.GetExtension(path);
    string type = "Application/pdf";
    Response.AppendHeader("content-disposition","attachment; filename=" + path);
    Response.WriteFile(path);
    Response.End();  

Подробнее Вот обновленный код, все еще не работает для IE.

 string path = MapPath(fname);
    string name = Path.GetFileName(path);
    string ext = Path.GetExtension(path);
    string type = "Application/pdf";
    Response.ClearHeaders();
    Response.ClearContent();
    Response.ContentType = type;
    Response.AddHeader("content-disposition","attachment; filename=" + path);
    Response.WriteFile(path);
    Response.End();  

Ответы [ 4 ]

4 голосов
/ 07 апреля 2011

Вы, вероятно, должны попытаться установить тип mime для "application / octet-stream".Если вы не хотите, чтобы конкретный обработчик отвечал на mime-тип.

1 голос
/ 08 апреля 2011

Если этот код

 Response.AddHeader("content-disposition","attachment; filename=" + path);

быть изменено как

 Response.AddHeader("content-disposition","attachment; filename=" + name + "." + ext);

или

 Response.AddHeader("content-disposition","attachment; filename=" + name + ".pdf");

Другие вещи для проверки

  1. Response.Buffer для истины в начале
  2. Response.clear в начале
  3. Использовать response.binarywrite вместо writefile
  4. Ответ флеш в конце
  5. Убедитесь, что HTML-символы или пробелы не записаны в response.stream, кроме двоичного.
0 голосов
/ 08 апреля 2011

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

0 голосов
/ 07 апреля 2011

Добавив следующие две строки вверху, исправил это для меня:

Response.ClearContent();
Response.ClearHeaders();
...