开发者社区> 问答> 正文

MVC3如何用AJAX从服务器下载Excel文件?:报错

页面上有一些条件,我想将这些条件传递到后台,读取数据,然后生成excel文件下载下来。

前台代码如下

后台代码如下:

但是总是无法以文件的形式返回,而是直接返回文本内容。

试过很多方式,实在是没辙了,请各位帮帮忙。

展开
收起
kun坤 2020-06-06 23:09:32 595 0
1 条回答
写回答
取消 提交回答
  • 为什么要用ajax下载?下面是我以前写的一个下载word的,你可以参考下,希望对你有所帮助

    @RequestMapping(value = "/download", method = RequestMethod.GET)
        public void download(HttpServletRequest request, HttpServletResponse response) {
            String projectPath = System.getProperty("user.dir");
            projectPath = projectPath.replace("\\", "/");
            response.setContentType("application/msword");
            try {
                response.setHeader(
                        "Content-Disposition",
                        "attachment; filename="
                                + URLEncoder.encode(
                                        "trip" + TripUtil.generateDate() + ".doc",
                                        "UTF-8"));
                InputStream inputStream = new FileInputStream(
                        TemplatePath.OUTPUT_PATH + "/trip"
                                + TripUtil.generateDate() + ".doc");
                OutputStream os = response.getOutputStream();
                byte[] b = new byte[10240];
                int length;
                while ((length = inputStream.read(b)) > 0) {
                    os.write(b, 0, length);
                }
                os.flush();
                os.close();
                inputStream.close();
            } catch (Exception e) {
                LOGGER.error(e);
                response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            }
    
        }




    ######对客户端来说,都是用 http 协议跟服务器交互的,跟服务器是什么开发语言,否MVC没半点关系######如图所示,C# MVC3中可以用FileResult返回所需的文件,而不是通过设置response来下载。所以我想试试FileResult到底怎么用。######jQuery.download = function (url, data, method) {
        // 获得url和data
        if (url && data) {
            // data 是 string 或者 array/object
            data = typeof data == 'string' ? data : jQuery.param(data);
            // 把参数组装成 form的  input
            var inputs = '';
            jQuery.each(data.split('&'), function () {
                var pair = this.split('=');
                inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
            });
            // request发送请求
            jQuery('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>')
            .appendTo('body').submit().remove();
        };

    };

    调用

    <input type="button" value="数据导出到Excel" onclick="$.download('@Url.Content("~/Default/DownExcel")', 'FileName=检测汇总统计表', 'get');" style="width: 120px;" class="command-btn" />

    Controller


    strPath = "C:\\ww.xls";
               //IE浏览器,取消注释下面的代码
               //     strFileName = Server.UrlEncode(strFileName);
                return File(strPath, objFileInfo.ContentType, strFileName);

    2020-06-06 23:09:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题) 立即下载
服务器迁移到阿里云的step by step 立即下载
函数计算事件驱动的无服务器计算服务 立即下载