我有一个C#asp.net网页,它从Mysql数据库(以longblob格式存储)读取PDF文件并打开它。它适用于我的Localhost;页面从数据库中读取文件并使用acrobat reader打开,但在部署页面后它在测试服务器中不起作用。 acrobat阅读器无法打开,我在taskmgr管理器中看不到acroRd32.exe。我觉得这是权限问题,因为我使用process.start()可能不允许在服务器但我没有看到错误消息。如果有权限需要在服务器上完成;有人可以指点我的方向吗?
谢谢。
MySqlDataReader Reader = null;
connection.Open();
MySqlCommand command = new MySqlCommand("Select Image, File_Type, File_Name from table where ImageID = " + ImageID, connection);
Reader = command.ExecuteReader();
if (Reader.Read())
{
byte[] buffer = (byte[])Reader["Image"];
System.IO.MemoryStream stream1 = new System.IO.MemoryStream(buffer, true);
stream1.Write(buffer, 0, buffer.Length);
String fileName = Reader["File_Name"].ToString();
String dirName = "C:\\thefolder\\";
if (!Directory.Exists(dirName))
{
// if not then create
Directory.CreateDirectory(dirName);
}
if (File.Exists(dirName+fileName))
File.Delete(dirName + fileName);
Directory.CreateDirectory(Path.GetDirectoryName(Reader["File_Name"].ToString()));
using (Stream file = File.Create(dirName + fileName))
{
file.Write(buffer, 0, buffer.Length);
}
Process process = new Process();
process.StartInfo.FileName = "AcroRd32.exe";
process.Start();
}
感谢您的帮助,我可以通过回复发送pdf内容。这是代码
//Process process = new Process();
//process.StartInfo.FileName = "AcroRd32.exe";
//process.Start();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment");
Response.TransmitFile(dirName + fileName);
Response.End();
答案 0 :(得分:7)
您的C#代码在服务器上运行
因此,Process.Start
在服务器而不是您的计算机上启动进程。
根本不可能直接在客户端上启动进程。
但是,如果您在HTTP响应中提供PDF(使用正确的Content-Type
),浏览器将在PDF查看器中打开它。
答案 1 :(得分:2)
您无权从ASP.Net工作进程执行此操作。 你需要冒充:
How To: Use Impersonation and Delegation in ASP.NET 2.0
没有彻底阅读这个问题...... 如果您不想在服务器上启动进程,则可以使用模拟。 否则,您应该从IIS提供此文件 - 以允许用户下载它。
Serving Dynamic Content with HTTP Handlers
或者如果您使用的是ASP.NET.MVC: