<script type="text/javascript"> function upload(a){ var path = a.attr('value'); var data ={ url: base64encode(path) }; $.post("/Handler/DownLoad.ashx?r="+ Math.random(),{ url: base64encode(path) },function(date){ if(date == "0"){ alert("下载失败!"); return ; } if(date == "1"){ alert("下载成功!"); return ; } if(date == "-1"){ alert("文件不存在!"); return ; } }) } </script>
一般处理程序代码如下
public static void TransferFile(string filepath) { StreamWriter sw = new StreamWriter(@"E:\ENDadmin\ndfile\2.txt", true, Encoding.UTF8); try { FileStream filestream = new FileStream(filepath, FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); sw.WriteLine("文件完成读取"); long filesize = filestream.Length; // sw.WriteLine("查询大小完成"); //让客户端浏览器正确识别这个文件的类型和文件大小 string filename = System.IO.Path.GetFileName(filepath).ToLower(); sw.WriteLine("识别大小完成"); HttpContext.Current.Response.ContentType = "application/octet-stream"; sw.WriteLine("制定类型完成"); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + "\";"); sw.WriteLine("文件位置制定完成"); HttpContext.Current.Response.AddHeader("Content-Length", filesize.ToString()); sw.WriteLine("长度制定完成"); //将文件中的数据发送到客户端 byte[] filebuffer = new byte[filesize]; sw.WriteLine("获取文件数据"); filestream.Read(filebuffer, 0, (int)filesize); sw.WriteLine("发送ING"); HttpContext.Current.Response.BinaryWrite(filebuffer); HttpContext.Current.Response.Flush(); sw.WriteLine("发送完成"); filestream.Close(); sw.WriteLine("释放"); HttpContext.Current.ApplicationInstance.CompleteRequest(); } catch (Exception ex) { sw.WriteLine("报错了!" + ex.Message); sw.WriteLine("报错了!" + ex.TargetSite); } finally { sw.Flush(); sw.Close(); } }
日志的显示
文件完成读取
识别大小完成
制定类型完成
文件位置制定完成
长度制定完成
获取文件数据
发送ING
发送完成
释放
但是 运行程序却没有提示保存 没有任何反应
js 不可接受二进制流
哪个是保存?
我觉得是content-type有问题,你先试图下载图片试试,写定为jpg什么的,然后用firefox的firebug来看。这样你能更清楚全程。
怎么解决的?