File 响应传输文件

File 响应传输文件,file,size,transmitfile,File,Size,Transmitfile,我有以下代码,当用户点击下载链接时,将文件发送给他们。为了安全起见,我不能直接链接到文件,所以这是为了解码url并传输文件而设置的 它已经工作了一段时间,但最近我开始有问题,文件将开始下载,但没有迹象表明该文件有多大 因此,当下载应该停止时,它不会停止 这个文件大约是99mb,但当我下载它时,浏览器只是不断下载超过100mb的文件。我不知道它正在下载什么,但如果我不取消它,它不会停止 因此,我的问题是,是否有一种方法可以替代传输文件,或者有一种方法可以确保文件的大小也被发送,以便它在正确的时间停

我有以下代码,当用户点击下载链接时,将文件发送给他们。为了安全起见,我不能直接链接到文件,所以这是为了解码url并传输文件而设置的

它已经工作了一段时间,但最近我开始有问题,文件将开始下载,但没有迹象表明该文件有多大

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

这个文件大约是99mb,但当我下载它时,浏览器只是不断下载超过100mb的文件。我不知道它正在下载什么,但如果我不取消它,它不会停止

因此,我的问题是,是否有一种方法可以替代
传输文件
,或者有一种方法可以确保文件的大小也被发送,以便它在正确的时间停止

代码如下:

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
,因为我不想将整个文件加载到内存中,因为它太大了


谢谢。

我想我已经找到答案了

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

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

对不起,我忘了发代码了。字符串文件名=Path.GetFileName(url);context.Response.Buffer=true;context.Response.Charset=“”;context.Response.Cache.SetCacheability(HttpCacheability.NoCache);context.Response.ContentType=“应用程序/x-rar-compressed”;context.Response.AddHeader(“内容处置”、“附件;文件名=“+filename”);context.Response.TransmitFile(context.Server.MapPath(url));context.Response.Flush();我找到了一些我希望能有所帮助的代码,但是没有。FileInfo OutFile=newfileinfo(context.Server.MapPath(url));context.Response.Clear();字符串文件名=Path.GetFileName(url);context.Response.Buffer=true;context.Response.Charset=“”;context.Response.Cache.SetCacheability(HttpCacheability.NoCache);context.Response.ContentType=“应用程序/x-rar-compressed”;context.Response.AddHeader(“内容处置”、“附件;文件名=“+filename”);context.Response.TransmitFile(context.Server.MapPath(url),0,OutFile.Length);context.Response.Flush();