我正在使用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); // ...
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);
我没试过这段代码.这就是我认为它会起作用的方式……