首页 新闻 会员 周边 捐助

MVC项目 EXTJS AJAX 后台下载文件,不弹出下载提示框。

0
悬赏园豆:100 [已解决问题] 解决于 2014-04-25 15:43

前台我用EXTJS AJXA 传一些数据到后台

       Ext.Ajax.request({
            url: "/InConsignation/MakePDF",
            params: {
                id: items[0].getData()
            },
           
            success: function (response) {
       
            }

        });

后台就是下载文件的代码

public ActionResult MakePDF(string id){
string fileName = "QQ五笔.exe";//客户端保存的文件名  
  string filePath = Server.MapPath("../../DownLoad/QQWubi_Setup.exe");//路径  

  FileStream fs = new FileStream(filePath, FileMode.Open);
  byte[] bytes = new byte[(int)fs.Length];
  fs.Read(bytes, 0, bytes.Length);
  fs.Close();
  Response.Charset = "UTF-8";
  Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
  Response.ContentType = "application/octet-stream";
    
  Response.AddHeader("Content-Disposition", "attachment; filename="+ fileName);
  Response.BinaryWrite(bytes);
  Response.Flush();
  Response.End();
return new EmptyResult();
} 

这样 什么反应都没有 断点走了 都不报错   前台也能得到回调信息 可就是不弹出下载文件的提示框

我试验了 不用EXTJS AJAX   用From  post到后台 可以正常下载

犹豫项目用EXTJS   求大神帮解决一下 

 

请求的主页 请求 | 初学一级 | 园豆:2
提问于:2014-04-25 11:46
< >
分享
最佳答案
0

动态构建一个 form 来 post 即可,比如用 JQuery,可以这么写:

/*
 * 动态构建一个Form 并且提交
*/
$.dynamicSubmit = function (url, datas) {

    var form = $('#dynamicForm');

    if (form.length <= 0) {
        form = $("<form>");
        form.attr('id', 'dynamicForm');
        form.attr('style', 'display:none');
        form.attr('target', '');
        form.attr('method', 'post');

        $('body').append(form);
    }

    form = $('#dynamicForm');
    form.attr('action', url);
    form.empty();

    if (datas && typeof (datas) == 'object') {
        for (var item in datas) {
            var $_input = $('<input>');
            $_input.attr('type', 'hidden');
            $_input.attr('name', item);
            $_input.val(datas[item]);

            $_input.appendTo(form);
        }
    }

    form.submit();
}

可以这么调用:

$.dynamicSubmit("/InConsignation/MakePDF",{id:'123456789'});

收获园豆:80
Sun.M | 菜鸟二级 |园豆:333 | 2014-04-25 13:23

谢谢朋友  实在不行 我也只能这样了  我看看EXTjs 还能有啥突破不 在等等其他朋友的答案

请求 | 园豆:2 (初学一级) | 2014-04-25 13:32
其他回答(1)
0

那是因为返回的数据被ajax接受的,弹出下载框的是浏览器.

ajax不会去管你传过来的文件,

而且本身文件下载就完全没有必要用ajax

收获园豆:20
吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-25 11:52

你好,可是 我必须前台回传信息 后台才能知道我要下载的事那个文件啊 请问如何解决

支持(0) 反对(0) 请求 | 园豆:2 (初学一级) | 2014-04-25 13:05

@请求: 可以动态拼接URL让用户点.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-25 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册