2010-10-01 4 views
0

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

На моем интегрированном сервере разработки 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(); 
} 

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

+3

Этот код выглядит, как он будет отображаться в формате PDF на веб-сервере. :) – bzlm

+0

Мне стыдно :). Если бы люди не прилагали усилий, чтобы помочь мне, я бы удалил свой вопрос :) – Eedoh

ответ

4

Вы не можете ожидать открытия программы по умолчанию, связанной с просмотром файлов 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"); 
0

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

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), поэтому я приму его решение.

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

Благодарности