新文章 网摘 文章 随笔 日记

js发送post请求下载文件

构建Model:

                getSearchModel: function () {
                    //获取多选的站别的值
                    var selectedItemValues = controller.getTerminals();
                    var searchModel = {
                        BEGIN_DATETIME: $('#BEGIN_DATETIME').val(),
                        END_DATETIME: $('#END_DATETIME').val(),
                        SWVERSION: $('#SWVERSION').val()
                    };
                    return searchModel;
                },

以Post方式下载文件的javascript,原文链接:https://www.lmlphp.com/user/57768/article/item/869708/

                /*===================下载文件
                 * options:{
                 * url:'',  //下载地址
                 * data:{name:value}, //要发送的数据
                 * method:'post'
                 * }
                 */
                downLoadFile: function (options) {
                    var config = $.extend(true, { method: 'post' }, options);
                    var $iframe = $('<iframe id="down-file-iframe" />');
                    var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
                    $form.attr('action', config.url);
                    for (var key in config.data) {
                        controller.appendFormData($form, key, config.data[key]);
                    }
                    $iframe.append($form);
                    $(document.body).append($iframe);
                    $form[0].submit();
                    $iframe.remove();
                },
                //递归添加数据到form中
                appendFormData: function ($form, key, obj) {
                    if (Array.isArray(obj)) {
                        debugger;
                        for (var i = 0; i < obj.length; i++) {
                            controller.appendFormData($form, key + '[' + i+']' , obj[i]);
                        }
                    } else {
                        $form.append('<input type="hidden" name="' + key + '" value="' + obj + '" />');
                    }
                }

为button添加事件

            //导出
            $("#btnExport").click(function (e) {
                var url = '@Url.Action("Export")';
                var searchModel = controller.getSearchModel();
                controller.downLoadFile({
                    url: url, //请求的url
                    data: searchModel//要发送的数据
                });
            });

 

C# 使用CSVHelper导出数据

        [HttpPost]
        [AllowAllSignInUser]
        public ActionResult Export(AlyTestVariabilityChartQueryFilter filter)
        {
            if (!ModelState.IsValid)
            {
                var msg = GetModelStateErrs();
                return Result(null, ResultStatus.ModelUnValid, msg, GetModelStateErrList());
            }
            try
            {
                filter.TERMINAL_NAMES = filter.TERMINAL_NAMES.Where(r => !string.IsNullOrWhiteSpace(r)).ToList();

                var dt = _alyTestResultService.Export(filter);
                var fileName = $@"TestLog_{DateTime.Now:yyyyMMddHHmmss}.csv";
                string fileFullName = $@"{GlobalConfig.UploadRootDirectory}\DownloadTemp\{fileName}";
                string dir = Path.GetDirectoryName(fileFullName);
                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }

                using (var textWriter =System.IO.File.CreateText(fileFullName))
                {
                    using (CsvWriter csv = new CsvWriter(textWriter, System.Globalization.CultureInfo.CurrentCulture))
                    {
                        // 写列名
                        foreach (DataColumn column in dt.Columns)
                            csv.WriteField(Regex.Replace(  column.ColumnName,@"_\d+$",""));
                        csv.NextRecord();
                        //写行数据
                        foreach (DataRow row in dt.Rows)
                        {
                            for (var i = 0; i < dt.Columns.Count; i++)
                                csv.WriteField(row[i]);
                            csv.NextRecord();
                        }
                    }
                }
                return File(fileFullName, "application/vnd.ms-excel", fileName);
            }
            catch (Exception ex)
            {
                Log(new List<object> { filter }, ex);
                return Result(null, ResultStatus.Error, ex.Message);
            }
        }

 

https://www.lmlphp.com/user/57768/article/item/869708/

 

posted @ 2023-02-14 18:30  岭南春  阅读(1425)  评论(0)    收藏  举报