byte[] downbuffer = fsc.DownloadFile(wj.fileid, null);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = false;
Response.AddHeader("Content-Length", downbuffer.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(wj.zbwjName, System.Text.Encoding.UTF8));
try
{
try
{
using (MemoryStream mms = new MemoryStream(downbuffer))
{
long dataToRead = mms.Length;
int length = 0;
// 缓冲区为10k
byte[] buffer = new Byte[10000];
while (dataToRead > 0)
{
// 检查客户端是否还处于连接状态
if (Response.IsClientConnected)
{
length = mms.Read(buffer, 0, 10000);
Response.OutputStream.Write(buffer, 0, length);
Response.Flush();
buffer = new Byte[10000];
dataToRead = dataToRead - length;
}
else
{
// 如果不再连接则跳出死循环
dataToRead = -1;
}
}
} }
catch (Exception e)
{
AlertErrMsg = e.Message;
}
}
finally
{
Response.End();
}这段代码为下载代码,但是遇到了很奇怪的问题,就是下载工具下载时会出现假死的现象,跟踪后语句是在Response.OutputStream.Write(buffer, 0, length);这句后会卡死,原因是执行了这句语句后下载工具会截获到响应,但是不知道为什么像世界之窗、搜狗、360等浏览器自带的下载工具点击确定和取消,都不会提交回来。所以线程一直在等待,导致假死。但如果使用IE自带的下载方式下载,则完全正常,无论是保存、取消还是直接打开都没有问题。
不知道是什么原因!
解决方案 »
- 用过developer Express的进来看看呀
- 为什么 控件拖不动?
- 求教一些CSS
- 网站变灰代码,仅为大家共享
- 怎么样将一个DATAVIEW中的数据添加到另外一个DATAVIEW中
- 下载asp.net forums 并在本地机能够打开,怎样添加到我自己的网站中?
- 问个菜鸟的问题 如何将INPUT里面的VALUE值清空呢
- Application几久才End,能像Session在web.config中设置Timeout吗?怎样在Application中每隔5分钟执行一次动作?
- 关于标签链接的问题,点击链接后,在新的一页打开详细内容
- 用Response.Write("......")正常,但是如果在其中加上html就是乱码,比如:Response.Write("<Font color='red'>"+"...."+"</Font>"),请帮忙!
- GRIDEVIEW中有两个TEXTBOX,当一个填入数量,另一个出现金额
- 关于传href后面链接的问题
byte[] downbuffer = fsc.DownloadFile(wj.fileid, null);
这是从wcf中获取文件流,获取成功。但是从wcf获取的文件流,如果IE内核的浏览器自带的下载工具下载则会失败。
改成这样看看