Response.WriteFile PDF файлы - поврежденные файлы - PullRequest
1 голос
/ 21 апреля 2009

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

FileInfo file = new FileInfo(Path.Combine(_module.FileDir, _file.FilePath));
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = _file.ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Regex.Replace(_file.FilePath, "\\s", "-"));
Response.AppendHeader("Content-Length", file.Length.ToString());
try
{
    Response.WriteFile(file.FullName);
    Response.Flush();
    Response.Close();
}
catch
{
    Response.ClearContent();
}

Ответы [ 5 ]

1 голос
/ 21 апреля 2009

Вам нужны эти три утверждения:

Response.Flush (); Response.Close (); Response.End ();

Последний является самым важным.

1 голос
/ 21 апреля 2009

IIS HTTP-сжатие и потоковая передача PDF: не работают должным образом. http://blog.1530technologies.com/2006/11/iis_http_compre.html

1 голос
/ 21 апреля 2009

Моя проблема была с модулем HTTP. Я применял фильтр белого пространства

    HttpApplication app = sender as HttpApplication;
    if (app != null && app.Request.RawUrl.Contains(".aspx"))
    {
        app.Response.Filter = new WhitespaceFilter(app.Response.Filter);
    }
0 голосов
/ 21 апреля 2009
  1. Вы уверены, что получаете правильный тип MIME?
  2. Вы пытаетесь заставить пользователя загрузить или просто передать данные в формате PDF?
  3. Вы выполняете вызов Response.End () где-нибудь, чтобы гарантировать, что никакие дополнительные данные (за исключением заголовков и двоичного файла PDF) не отправляются?

Я думаю, что это # ​​3, что может быть вашей проблемой здесь. База знаний Microsoft предоставляет этот код, по сути, для того, что вы, кажется, делаете.

//Set the appropriate ContentType.
Response.ContentType = "Application/pdf";
//Get the physical path to the file.
string FilePath = MapPath("acrobat.pdf");
//Write the file directly to the HTTP content output stream.
Response.WriteFile(FilePath);
Response.End();
0 голосов
/ 21 апреля 2009

Для этой ситуации Response.Redirect должен работать так же хорошо:

FileInfo file = new FileInfo(Path.Combine(_module.FileDir, _file.FilePath));
Response.Redirect(file.FullName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...