Ext.Net一般处理程序上传文件

  引言

    最近公司项目全部转向前端化,故所有aspx页面业务逻辑尽可能的转到用户控件前台页面完成。以方便每次发布项目时只是替换前端页面不会影响客户体验。

既然转到前台逻辑,那么必须走后台的业务也就单独封装了一个公共一般处理程序,用CMD命令方式生成DLL。项目引用该DLL,每次有更新后台方法生成新的DLL替换原有的,避免影响线上客户。

  有了这些需求铺垫,现在故针对Excel导入或者导出做了后台处理方案。

前台js获取ext:FileUploadField控件选中值上传提交至服务器一般处理程序:

var file = App.FileUploadID.getEl().down('input[type=file]').dom.files[0];
                 if (file == undefined) {
                     Alert("请选择Excel文件!");
                 } else {
                     var reader = new FileReader();
                     reader.onload = (function (theFile) {
                         return function (e) {
                             $.ajax({
                                 type: "post",
                                 url: "/CommonMethodHandler.ashx",
                                 data: "Type=1&reader=" + encodeURIComponent(e.target.result),
                                 success: function (result) {
                                     Alert(result);
                                 }
                             });
                         };
                     })(file);
                     reader.readAsDataURL(file);
                 }

js相关涉及到的知识点不做过多解释,如有疑问,自行百度了解。

后台C#代码:

public void TestRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string Type = context.Request.Params["Type"];
            string result = "";
            switch (Type)
            {
                case "1":
                    result = TestExcelImport(context);
                    context.Response.Write(result);
                    break;
            }
        }

public string TestExcelImport(HttpContext context)
        {
            try
            {
                string str = context.Request["reader"];
                var reader = str.Split(',')[1];
                byte[] bytes = Convert.FromBase64String(reader);
                if (bytes == null)
                {
                    return "请选择Excel文件";
                }
                else
                {
                    DataTable dataTable = new DataTable();
                    using (MemoryStream memoryStream = new MemoryStream(bytes))
                    {
                        dataTable = ExcelDll.TranslateToTable(memoryStream, 0);//封装DLL,请自行百度内存流转dataTable
                        dataTable.TableName = "TestTempData";
                        using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(xEncrypt.DecryptText('连接字符串'), SqlBulkCopyOptions.UseInternalTransaction))
                        {
                            try
                            {
                                sqlbulkcopy.DestinationTableName = "TestTempData";
                                sqlbulkcopy.WriteToServer(dataTable);
                            }
                            catch (System.Exception ex)
                            {
                                throw ex;
                            }
                        }
                    }
                    return "导入成功";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

导入就实现了,导出请参考另外文章《使用Aspose插件对Excel操作

posted @ 2017-05-19 15:07  唐崇杨  阅读(701)  评论(0编辑  收藏  举报