Почему мой документ PDF не отображается / загружается в ASP.NET MVC2? - PullRequest
0 голосов
/ 01 октября 2010

У меня есть приложение ASP.NET MVC2 в разработке, и у меня возникают проблемы при рендеринге файла .pdf с нашего производственного сервера.

На моем интегрированном сервере разработки Visual Studio 2010 все работает нормально, но после публикации приложения на рабочем сервере происходит сбой.Он не выдает никаких исключений или ошибок любого рода, он просто не показывает файл.

Вот моя функция для отображения документа PDF:

public static void PrintExt(byte[] FileToShow, String TempFileName, 
                                                       String Extension)
{
    String ReportPath = Path.GetTempFileName() + '.' + Extension;

    BinaryWriter bwriter = 
        new BinaryWriter(System.IO.File.Open(ReportPath, FileMode.Create));
    bwriter.Write(FileToShow);
    bwriter.Close();

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = ReportPath;
    p.StartInfo.UseShellExecute = true;
    p.Start();
}

Мой рабочий сервер работает под управлением WindowsServer 2008 и IIS 7.

Ответы [ 3 ]

4 голосов
/ 01 октября 2010

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

public ActionResult ShowPdf()
{
    byte[] fileToShow = FetchPdfFile();
    return File(fileToShow, "application/pdf", "report.pdf");
}

А теперь перейдите к /somecontroller/showPdf. Если вы хотите, чтобы PDF-файл открывался внутри браузера, а не отображал диалоговое окно загрузки, вы можете попробовать добавить следующее к действию контроллера перед возвратом:

Response.AddHeader("Content-Disposition", "attachment; filename=report.pdf");
2 голосов
/ 01 октября 2010

Я предлагаю вам использовать ASP.NET MVC FileResult Class для отображения PDF.

см. http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx

Ваш код открывает файл PDF на веб-сервере.

0 голосов
/ 11 октября 2010

Вот как я это сделал.

public ActionResult PrintPDF(byte[] FileToShow, String TempFileName, String Extension)
    {
        String ReportPath = Path.GetTempFileName() + '.' + Extension;

        BinaryWriter bwriter = new BinaryWriter(System.IO.File.Open(ReportPath, FileMode.Create));
        bwriter.Write(FileToShow);
        bwriter.Close();

        return base.File(FileToShow, "application/pdf");
    }

Спасибо всем за ваши усилия. Решение, которое я использовал, наиболее похоже на решение Дарина (почти то же самое, но оно красивее: D), поэтому я приму его решение.

Голосуйте за всех вас (как за ответы, так и за комментарии)

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...