问题描述
问题描述:下载文件时,我使用的是Response.writeFile()方法,所下载的文件一个二进制文件.app.lst.我已在IIS的Mime中设置了.lst为application/lst.我想实现下载app.lst.程序代码:[app.aspx]stringtargetName="app.lst";//下载后的文件名定义stringfileName=Server.MapPath("~/"+targetName);//下载文件的全路径FileInfofileInfo=newFileInfo(fileName);//文件确定路径是对的,省去了判断文件是否存在的代码Response.Clear();Response.Status="206PartialContent";Response.ContentType="application/lst";Response.AddHeader("Content-Length",fileInfo.Length.ToString());Response.AddHeader("Content-Range","bytes0-"+(fileInfo.Length-1)+"/"+fileInfo.Length);Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(targetName,System.Text.Encoding.ASCII));Response.WriteFile(fileInfo.FullName);Response.End();==================================================================以上代码如果直接请求(.aspx后不带任何参数)http://localhost:xxx/web/app.aspx会报错,说找不到资源如果在请求地址后面加一个"?",即请求地址为http://localhost:xxx/web/app.aspx?才可以正常下载.还有一种办法,不用writeFile用,writeBinary(byte[])可以正常下载...不需要请地址的带"?"我的分析过程:1.copy一文本文件helloworld.txt到相同的下载目录,下载文件名当然也改为helloworld.txt2.Response.ContentType="application/lst";改为"text/xml"3.请求http://localhost:xxx/web/app.aspx,可以下接下载.以上区别在于text/xml是系统已知的contenttype而application/lst是我自定义的lst..net对于自义于的contenttype的文件下载时,有这错误~~~~.还有请教,对于下载文件,是否writefile效率会要高于writeBinary(byte[])呢?不知writefile是如何实现的,如果用writeBinary只能先将文件内容读取到byte[]再Response.writeBinary(byte[]).这样服务器有可能压力大一些.请问高手他们对于下载二进制文件有何区别,writeBinary相对writeFile会增大服务器压力,或降底效率吗?
解决方案
解决方案二:
这个帖子曾发在MSCNC#版块,一两天没有回,觉得实在冷啊~~.应该基本可以断定是.NET的一个bug,有兴趣或有同样经验的XDJM们验证一下~或帮我指出的问题所在,万分感谢~~~!!!!!!!!!!!!!
解决方案三:
自己结帖! 犯了一个错误!去掉下面的Response.Status="206PartialContent";加上这一行,让IE以为你服务器发送的文件还没有发完,去掉这一行就好了