将生成的文件保存到服务器

时间:2014-04-04 18:48:17

标签: c# asp.net

我正在使用方便的iText for C#生成PDF。现在,我基本上只需要生成这个PDF并通过电子邮件发送它。目前我可以用PDF生成文件,但我不想硬编码保存文件的路径。例如,我正在保存这样的文件:

        string file = "C:\\Receipts\" + ConfirmationNumber + ".pdf";

现在,硬编码这样的路径完全违背了最佳做法。如何按照最佳做法正确保存文件?也许到项目本身的文件夹?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

如果你有HttpContext,你可以使用PhysicalApplicationPath

string filePath = string.Format("{0}\\App_Data\\ExportImport\\{1}", 
   HttpContext.Current.Request.PhysicalApplicationPath, fileName);

如果您没有HttpContext,可以使用AppDomainAppPath

string filePath = string.Format("{0}App_Data\\ExportImport\\{1}",
   HttpRuntime.AppDomainAppPath, fileName);

答案 1 :(得分:1)

将文件写入磁盘吗?将iText创建的pdf直接发送到此 SO answer from Brianng

的电子邮件非常简单
var doc = new Document();
MemoryStream memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);

doc.Open();
doc.Add(new Paragraph("First Paragraph"));
doc.Add(new Paragraph("Second Paragraph"));

writer.CloseStream = false;
doc.Close();
memoryStream.Position = 0;

MailMessage mm = new MailMessage("username@gmail.com", "username@gmail.com")
{
    Subject = "subject",
    IsBodyHtml = true,
    Body = "body"
};

mm.Attachments.Add(new Attachment(memoryStream, "filename.pdf"));
SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    Credentials = new NetworkCredential("username@gmail.com", "password")
};

smtp.Send(mm);