c# – 在向用户显示后立即删除动态生成的PDF文件

我正在使用ITextSharp和ASP.NET 1.1动态创建PDF文件.我的流程如下 –

>在服务器上创建文件
>将浏览器重定向到新创建的PDF
文件,以便显示用户

我想要做的是在用户浏览器中显示PDF后立即从服务器中删除PDF. PDF文件很大,因此无法将其保存在内存中,因此需要对服务器进行初始写入.我目前正在使用定期轮询文件然后删除它们的解决方案,但我更喜欢在将文件下载到客户端计算机后立即删除文件解决方案.有没有办法做到这一点?

解决方法

您可以使用自己的HttpHandler自行提供文件,而不是将浏览器重定向到创建的文件.然后,您可以在提供文件后立即删除文件,或者您甚至可以在内存中创建该文件.

将PDF文件直接写入客户端:

public class MyHandler : IHttpHandler {
    public void ProcessRequest(System.Web.HttpContext context) {
        context.Response.ContentType = "application/pdf";
        // ...
        PdfWriter.getInstance(document,context.Response.OutputStream);
        // ...

或读取已生成文件’filename’,提供文件,删除它:

context.Response.Buffer = false;
context.Response.BufferOutput = false;
context.Response.ContentType = "application/pdf";

Stream outstream = context.Response.OutputStream;
FileStream instream = 
    new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read);

byte[] buffer = new byte[BUFFER_SIZE];
int len;
while ((len = instream.Read(buffer,BUFFER_SIZE)) > 0) {
    outstream.Write(buffer,len);
}
outstream.Flush();
instream.Close();

// served the file -> Now delete it 
File.Delete(filename);

我没试过这段代码.这就是我认为它会起作用的方式……

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...