我正在开发一个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();
}
我的生产服务器正在运行Windows Server 2008和IIS 7.
答案 0 :(得分: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");
答案 1 :(得分:2)
我建议您使用ASP.NET MVC FileResult类来显示PDF。
请参阅http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx
您的代码在网络服务器上打开PDF。
答案 2 :(得分: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");
}
谢谢大家的努力。我使用的解决方案与Darin的解决方案最相似(几乎相同,但他更漂亮:D),所以我会接受他的解决方案。
为所有人投票(答案和评论)
由于