首页 新闻 赞助 找找看

C# 异步下载 程序执行了,却没有任何反应

0
[已解决问题] 解决于 2013-10-21 20:58
 <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
发送完成
释放  

但是 运行程序却没有提示保存 没有任何反应

jory的主页 jory | 菜鸟二级 | 园豆:324
提问于:2013-09-13 19:01
< >
分享
最佳答案
0

js 不可接受二进制流

jory | 菜鸟二级 |园豆:324 | 2013-10-21 20:57
其他回答(3)
0

哪个是保存?

iEvent | 园豆:529 (小虾三级) | 2013-09-14 11:46
0

我觉得是content-type有问题,你先试图下载图片试试,写定为jpg什么的,然后用firefox的firebug来看。这样你能更清楚全程。

arg | 园豆:1047 (小虾三级) | 2013-09-14 17:19
0

怎么解决的?

wqsky | 园豆:120 (初学一级) | 2016-08-18 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册