2010-04-08 94 views
2

我有一个ashx处理程序与下面的代码。我们的想法是隐藏文件的路径,并提示下载System.OutOfMemoryException下载文件

 context.Response.Clear(); 
     context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
     context.Response.AddHeader("Content-Length", file.Length.ToString()); 
     context.Response.ContentType = "application/octet-stream"; 
     context.Response.WriteFile(file.FullName); 

也能正常工作一段然而文件对别人我得到

异常类型“System.OutOfMemoryException的”被抛出。

+1

在卡西尼? IIS? – JoeBilly 2010-04-08 12:33:14

+0

抛出异常的文件的长度是多少? – kgiannakakis 2010-04-08 12:33:56

+0

它是IIS7,所有文件的大小都是7mb。有时候是有效的。我想我应该在使用声明中包装这个。任何想法应该实现什么 – frosty 2010-04-08 13:26:09

回答

6

非常奇怪,7Mb真的很小。也许你的应用程序池有一个下限?

如果您只需要一个文件下载处理程序,请使用HttpResponse.TransmitFile()这些文件不会在内存中缓冲该文件。

http://msdn.microsoft.com/en-us/library/12s31dhy%28VS.80%29.aspx

+0

@joe,请参阅此页http://msdn.microsoft.com/en-us/library/e1f13641.aspx,httpRuntime - > maxRequestLength,可能appRequestQueueLimit ---我做错了吗? – Aristos 2010-04-08 14:13:22

+0

@Aristos,哦,我明白了!你错误**请求**限制和**响应**限制;)由于文件是由服务器传输的,它的响应而不是请求。并且请求限制不会抛出OutOfMemoryException,这意味着真正的内存问题。 – JoeBilly 2010-04-08 14:24:51

+0

+1好的,谢谢你的信息。 – Aristos 2010-04-08 14:34:00

0

您已填充系统内存。对于较大的文件,传输的数据会缓存在内存中。我会建议创建自己的自定义缓存方法。