功能描述:文件以二进制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 消息,看看你的“前台”一共发出了多少次请求。
------解决思路----------------------
首先你要明白response是对响应报文进行封装的对象,里面的大部分属性都是设置http响应报文报文头,它必须遵守http协议报文头的规范,报文体就是你要发送的数据.你要明白了这个道理就不会去这么乱写