我在删除仅为发送带有附件的电子邮件然后在浏览器中查看而创建的文件时遇到问题。现在我需要删除这个文件,因为它只是为了发送电子邮件而创建的。我怎样才能做到这一点。
这是我到目前为止所得到的。
public void SendEmail()
{
EmailClient.Send(mailMessage);
//View PDF Certificate in Browser
ViewPDFinBrowser((string)fileObject);
DeleteGeneratedTempCertificateFile((string)fileObject));
}
public void ViewPDFinBrowser(string filePath)
{
PdfReader reader = new PdfReader(filePath);
MemoryStream ms = new MemoryStream();
PdfStamper stamper = new PdfStamper(reader, ms);
stamper.ViewerPreferences = PdfWriter.PageLayoutSinglePage | PdfWriter.PageModeUseThumbs;
stamper.Close();
Response.Clear();
Response.ContentType = "application/pdf";
Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
Response.OutputStream.Close();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
public static void DeleteGeneratedTempCertificateFile(Object fileObject)
{
string filePath = (string)fileObject;
if (File.Exists(filePath))
{
File.Delete(filePath);
}
}
所以这是我调用 SendEmail() 时需要的步骤
1) 发送带有附件的电子邮件 --> 创建临时文件 2) 在浏览器中查看临时文件 3) 删除临时文件
我可以理解,只要文件在响应对象中,我就不能对它做任何事情,因为我收到错误消息(“文件被另一个进程使用)。如果我关闭响应流,那么文件将被删除但我不能在浏览器中查看。
我在想,如果我能设法在单击按钮时以某种方式打开文件以在新窗口中的浏览器中查看,我将能够删除该文件。或者我想我可以在 10 分钟后删除文件。因为用户不会在现场查看 PDF 超过 1-2 分钟。
请用示例代码告诉我一种解决方案。
感谢您的时间和帮助。