响应TransmitFile

时间:2009-12-03 03:13:30

标签: file size transmitfile

我有以下代码在用户点击下载链接时向其提供文件。出于安全考虑,我不能直接链接到文件,因此设置为解码URL并传输文件。

它已经运行了一段时间,但最近我开始遇到文件将开始下载的问题,但没有迹象表明文件有多大。

因此,当下载停止时,它不会。

该文件大约是99mb,但是当我下载它时,浏览器只会继续下载超过100mb的方式。我不知道它的下载是什么,但是如果我不取消它,它就不会停止。

所以,我的问题是,是否有替代TransmitFile的方法或确保文件大小也被发送以便在正确的时间停止?

以下是代码:

string filename = Path.GetFileName(url); 
context.Response.Buffer = true; 
context.Response.Charset = ""; 
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
context.Response.ContentType = "application/x-rar-compressed"; 
context.Response.AddHeader("content-disposition", "attachment;filename=" + filename);   
context.Response.TransmitFile(context.Server.MapPath(url));
context.Response.Flush(); 

我不想使用WriteFile,因为我不想将整个文件加载到内存中,因为它太大了。

感谢。

1 个答案:

答案 0 :(得分:2)

我想我找到了答案。

我添加了以下代码,现在,至少对我而言,它报告了正确的文件大小并按预期工作。

FileInfo OutFile = new FileInfo(context.Server.MapPath(url));
long filesize = OutFile.Length; 
....
context.Response.AddHeader("Content-Length", filesize.ToString());