首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过sucess函数下载文件

问通过sucess函数下载文件
EN

Stack Overflow用户
提问于 2016-12-03 17:16:51
回答 2查看 86关注 0票数 0

我有一个成功的函数,点击服务器,发送一个列表的数据,处理它,并创建一个excel文件的处理数据。整个代码运行正常,但我无法下载文件。正在服务器上创建文件。

客户端代码是..

代码语言:javascript
复制
MOCService.getFilterExcel($scope.filterExcel).success(function (data, responce) {
                    console.log(responce)
                    return responce;
                })

服务器端:

代码语言:javascript
复制
public ActionResult getFilterExcel(List<FilterExcel> data)
    {
        System.Data.OleDb.OleDbConnection conn = null;
        try
        {


            string filename = "";

            var oldfilename = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\datafiles\\lswm\\reports.xlsx";
            filename = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\datafiles\\report\\report" + HttpContext.User.Identity.Name + ".xls";

            System.IO.File.Copy(oldfilename, filename, true);
            conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + "; Extended Properties=\"Excel 12.0 Xml;HDR=NO\";");
            conn.Open();

            //return null;
            int i = 3;
            foreach (var item in data)
            {
                var strsql = "insert into [Report$C" + (i) + ":L" + (i) + "] (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10)values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')";
                var cmd = conn.CreateCommand();
                cmd.CommandText = string.Format(strsql, item.ccrfNo,
                    item.requestDate,
                    item.requestedBy,
                    item.title,
                    item.changeImpact,
                    item.plant,
                    item.division,
                    "",
                    item.taskStatus,
                    item.currentPhase
                    );
                var rowcount = cmd.ExecuteNonQuery();
                i++;
            }

        }
        catch(Exception ex)
        {

        }
        finally
        {
            if (conn != null && conn.State == ConnectionState.Open) conn.Close();
        }
        return File(Request.PhysicalApplicationPath + "\\datafiles\\report\\report" + HttpContext.User.Identity.Name + ".xls", "Application/MS-excel", "report" + HttpContext.User.Identity.Name + ".xls");
    }

如果我直接从URL点击操作方法,那么文件会被下载,但不会通过应用程序下载。

EN

回答 2

Stack Overflow用户

发布于 2016-12-03 17:32:39

代码语言:javascript
复制
var blob = new Blob([res.data], {type: "application/*"});
        var objectUrl =(window.URL || window.webkitURL).createObjectURL(blob);
        var downloadLink = document.createElement("a");
        document.body.appendChild(downloadLink);
        downloadLink.style = "display: none";
        downloadLink.href = objectUrl;
        downloadLink.download = "Sample.xlsx";
        downloadLink.click();

这对我很有效。

票数 0
EN

Stack Overflow用户

发布于 2016-12-03 17:44:38

据我所知,使用AJAX下载文件的最好方法是使用FileSaver.js。这处理了许多不同的技巧,否则你必须自己做。因此,您只需使用Blob api获取blob本身,并将其与FileSaver.js相结合,即可将文件保存到磁盘。

另外,谷歌和SO (例如here)上有很多关于如何使用AJAX获取blob的信息,然后你可以使用FileSaver.js github页面来弄清楚如何将blob保存到磁盘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40946152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档