下载文件,用filestream方法输出到浏览器时,在浏览器中能保存但是不能打开?

时间:2022-10-21 15:14:23
使用如下代码输出文件到客户端:
FileStream filestream = new FileStream( filepath,FileMode.Open,System.IO.FileAccess.Read, System.IO.FileShare.Read );
long filesize = filestream.Length;

//让客户端浏览器正确识别这个文件的类型和文件大小
string filename = System.IO.Path.GetFileName( filepath ).ToLower();
HttpContext.Current.Response.ContentType = "text/plain" ;//  fileType ;// "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition","attachment; filename=\"" + HttpUtility.UrlEncode( filename,System.Text.Encoding.UTF8 ) + "\";");
HttpContext.Current.Response.AddHeader("Content-Length",filesize.ToString());

//将文件中的数据发送到客户端
byte[] filebuffer = new byte[filesize];
filestream.Read(filebuffer,0,(int)filesize);
HttpContext.Current.Response.BinaryWrite(filebuffer);
filestream.Close();
HttpContext.Current.Response.End();
点击下载时,客户端出现提示:您想打开或保存此文件吗?
点击[保存],正常;
但是点击[打开],会提示找不到文件[浏览器缓存地址],并问我要创建文件吗。

奇怪的是,同样的代码,在同样的服务器上,效果不同,我在asp.net创建了两个工程,
一个正常,另一个不正常。

恳请大家帮忙给解决一下,我无以回报,
以后我在论坛上遇到新手会多指导一下,作为对社会的回报吧



18 个解决方案

#1


友情up

#2


System.Text.Encoding.UTF8

编码错误
要用System.Text.Encoding.ASCII

#3


谢谢楼上的,不过用System.Text.Encoding.ASCII还是不行

#4


帖子不能沉啊

#5


up

#6


你还要让ContentType = xxxxxxx 我忘记了,就是设置HTTP流格式为文件传输格式,你去网上查下这个就好了

#7


谢谢楼上的,不过我已经设置了ContentType了

#8


HttpContext.Current.Response.AddHeader("Content-Length",filesize.ToString());

把这行代码去掉

#9


谢谢楼上的,把这行代码去掉之后仍然不行

#10


最后自己解决了

#11


说说笑笑怎么解决的?

#12


帮LZ顶

#13


这通常是客户端的问题,由于浏览器无法操作自己缓存而造成的。

#14


自己解决的话,是否应该给自己分呢?

#15


友情up

#16


jf~~

#17


up

#18


不应该用HttpContext.Current.Response,而应该用this.page.Response

#1


友情up

#2


System.Text.Encoding.UTF8

编码错误
要用System.Text.Encoding.ASCII

#3


谢谢楼上的,不过用System.Text.Encoding.ASCII还是不行

#4


帖子不能沉啊

#5


up

#6


你还要让ContentType = xxxxxxx 我忘记了,就是设置HTTP流格式为文件传输格式,你去网上查下这个就好了

#7


谢谢楼上的,不过我已经设置了ContentType了

#8


HttpContext.Current.Response.AddHeader("Content-Length",filesize.ToString());

把这行代码去掉

#9


谢谢楼上的,把这行代码去掉之后仍然不行

#10


最后自己解决了

#11


说说笑笑怎么解决的?

#12


帮LZ顶

#13


这通常是客户端的问题,由于浏览器无法操作自己缓存而造成的。

#14


自己解决的话,是否应该给自己分呢?

#15


友情up

#16


jf~~

#17


up

#18


不应该用HttpContext.Current.Response,而应该用this.page.Response