2012-09-21 91 views
1

我创建一个PDF文档访问路径被使用Server.Mappath拒绝

 var document = new Document(); 
     string path = Server.MapPath("AttachementToMail"); 
     PdfWriter.GetInstance(document, new FileStream(path + 
        "/"+DateTime.Now.ToShortDateString()+".pdf", FileMode.Create)); 

现在我想下载该文档

Response.ContentType = "Application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename="+ 
           DateTime.Now.ToShortDateString() + ".pdf" + ""); 
Response.TransmitFile(path); 
Response.End(); 

,但它给了我错误 访问路径“ 〜\ AttachementToMail'被拒绝。存在IIS_IUSRS

读/写访问

+1

Server.MapPath返回目录的绝对路径,但是您为我们提供了一个虚拟路径。你确定在调用'TransmitFile'时扩展了'path'吗? – Leonard

+0

明显的问题,但* * *运行该网站的帐户有权访问该文件夹?另外:你可以**明确**哪一行抛出?是它的字符串路径= Server.MapPath(“AttachementToMail”)'?另外:这只是一个错字问题?目录实际上是'AttachmentToMail'吗? –

+0

@MarcGravell错误在线Response.TransmitFile(path); – Alex

回答

2

您提供写的路径是一个虚拟路径。 TransmitFile需要绝对路径。

您的代码应该是这个样子:

var document = new Document(); 
string path = Server.MapPath("AttachementToMail"); 
var fileName = DateTime.Now.ToString("yyyyMMdd")+".pdf"; 
var fullPath = path + "\\" + fileName; 

//Write it to disk 
PdfWriter.GetInstance(document, new FileStream(fullPath, FileMode.Create)); 

//Send it to output 
Response.ContentType = "Application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename="+ fileName); 

Response.TransmitFile(fullPath); 
Response.Flush(); 
Response.End(); 

DateTime.Now表示当前时间。将它用作文件名时要小心。 使用ToShortDateString有点冒险,因为有些文化以此格式放置/。使用ToString将允许您修复您的文件名格式,而不考虑服务器的文化。

+0

Response.TransmitFile(fullPath); Response.End();该文件不下载 – Alex

+0

在Response.End();之前加上'Response.Flush();'' – nunespascal

+0

我加了Response.Flush();但仍然不工作:(文档已创建,但不下载 – Alex