当前位置: 代码迷 >> C# >> C# Response.Flush()出错 (二进制文件流传到前台有关问题)
  详细解决方案

C# Response.Flush()出错 (二进制文件流传到前台有关问题)

热度:306   发布时间:2016-05-05 04:48:05.0
C# Response.Flush()出错 (二进制文件流传到前台问题)
功能描述:文件以二进制byte[]被存储在数据库上,格式是img。其实无所谓了。前台使用extjs的ajax调用后台函数,
前台extjs代码如下:
/*
* 数据库文件下载
*/
function DBgridDownload(docID) {
Ext.Ajax.request({
url: "/Url/Load/DownLoad.aspx",
method: 'post',
params: {
DownLoad: "GetDBDocBase64",
F_ID: docID
},
success: function (response, options) {

},
failure: function () {
Ext.Msg.alert("系统提示", "系统异常,服务器未能响应!");
}
});
}

前台应该没有啥问题,只是触发个函数而已
后台代码写在Page_Load里边,包含if (!Page.IsPostBack)。具体代码为:
if (Serach == "GetDBDocBase64")
{
//GetDocBase64(Request);
Response.Buffer = true;
Model.Load.LOAD_DOC model = new Model.Load.LOAD_DOC();
model = LOAD_DOC_BLL.GetBDDocBase64ByID(Request["F_ID"]);
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(model.F_DOC_NAME, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length ", model.F_DOC.Length.ToString());
Response.ContentType = model.F_DOC_TYPE.Remove(0, 1);
Response.BinaryWrite(model.F_DOC);
Response.Flush();
Response.Close();
}
Response.End();

问题在于:当本代码被触发后,程序运行到Flush()部分,会返回到Buffer=true再次执行,多次执行后,系统在flush()报错。报错原因,远程服务器错误。错误代码:0x80070057
昨天搜了快一天,今天早上依然郁闷。求教

------解决思路----------------------
  Response.Buffer = true; 这个不要设置吧。
------解决思路----------------------
调试一下 http 消息,看看你的“前台”一共发出了多少次请求。
------解决思路----------------------
引用:
调试一下 http 消息,看看你的“前台”一共发出了多少次请求。


首先你要明白response是对响应报文进行封装的对象,里面的大部分属性都是设置http响应报文报文头,它必须遵守http协议报文头的规范,报文体就是你要发送的数据.你要明白了这个道理就不会去这么乱写
  相关解决方案