Alex
Alex

Reputation: 9720

Access to the path Server.MapPath is denied

I created one pdf document

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

Now I want to download this document

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

but it gave me error Access to the path '~\AttachementToMail' is denied.

read / write access for IIS_IUSRS exists

Upvotes: 1

Views: 4182

Answers (1)

nunespascal
nunespascal

Reputation: 17724

The path you are providing to write is a virtual path. TransmitFile expects an absolute path.

Your code should look something like this:

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 represents the current time. Be careful when you use it as the file name. Using ToShortDateString is a little risky, as some cultures put / in that format. Using ToString will allow you to fix your filename format regardless of the server culture.

Upvotes: 2

Related Questions