结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

前端之家收集整理的这篇文章主要介绍了结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、bootstrap-fileinpu的简单介绍

在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括上传文件,预览数据,选择并提交记录等一系列操作。

关于这个插件,我在早期随笔《》也做了一次介绍,这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x 的扩展,实现文件上传预览,多文件上传等功能。

bootstrap-fileinput源码:

bootstrap-fileinput在线API:

bootstrap-fileinput Demo展示:

这个插件主要是介绍如何处理图片上传的处理操作,原先我的Excel导入操作使用的是Uploadify插件,可以参考我随笔《》,不过这个需要Flash控件支持,在某些浏览器(如Chrome)就比较麻烦了,因此决定使用一种较为通用的上传插件,这次首先对基于Bootstrap前端架构的框架系统进行升级,替代原来的Uploadify插件,这样页面上传功能,在各个浏览器就可以无差异的实现了。

一般情况下,我们需要引入下面两个文件,插件才能正常使用:

bootstrap-fileinput/css/-fileinput/js/fileinput.min.js

在File input 插件使用的时候,如果是基于Asp.NET MVC的,那么我们可以使用BundleConfig.cs进行添加对应的引用,加入到Bundles集合引用即可。

css_metronic.Include();

在页面中,我们使用以下HTML代码实现界面展示,主要的bootstrap fileinput插件声明,主要是基础的界面代码

Excel导入的的界面展示如下所示。

选择指定文件后,我们可以看到Excel的文件列表,如下界面所示。

上传文件后,数据直接展示在弹出层的列表里面,这里直接使用了 Bootstrap-table表格插件进行展示。

这样我们就可以把Excel的记录展示出来,实现了预览的功能,勾选必要的记录,然后保存即可提交到服务器进行保存,实现了Excel数据的真正导入数据库处理。

2、Excel导出操作详细介绍

我们在实际导入Excel的界面中,HTML代码如下所示。

文件导入 TestUser-模板.xls
            <span style="color: #008000;"&gt;<!--</span><span style="color: #008000;"&gt;数据显示表格</span><span style="color: #008000;"&gt;--></span>
            <span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;table </span><span style="color: #ff0000;"&gt;id</span><span style="color: #0000ff;"&gt;="gridImport"</span><span style="color: #ff0000;"&gt; class</span><span style="color: #0000ff;"&gt;="table table-striped table-bordered table-hover"</span><span style="color: #ff0000;"&gt; cellpadding</span><span style="color: #0000ff;"&gt;="0"</span><span style="color: #ff0000;"&gt; cellspacing</span><span style="color: #0000ff;"&gt;="0"</span><span style="color: #ff0000;"&gt; border</span><span style="color: #0000ff;"&gt;="0"</span><span style="color: #0000ff;"&gt;></span>
            <span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;table</span><span style="color: #0000ff;"&gt;></span>
        <span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;div</span><span style="color: #0000ff;"&gt;></span>
        <span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;div </span><span style="color: #ff0000;"&gt;class</span><span style="color: #0000ff;"&gt;="modal-footer"</span><span style="color: #0000ff;"&gt;></span>
            <span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;button </span><span style="color: #ff0000;"&gt;type</span><span style="color: #0000ff;"&gt;="button"</span><span style="color: #ff0000;"&gt; class</span><span style="color: #0000ff;"&gt;="btn btn-default"</span><span style="color: #ff0000;"&gt; data-dismiss</span><span style="color: #0000ff;"&gt;="modal"</span><span style="color: #0000ff;"&gt;></span>关闭<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;button</span><span style="color: #0000ff;"&gt;></span>
            <span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;button </span><span style="color: #ff0000;"&gt;type</span><span style="color: #0000ff;"&gt;="button"</span><span style="color: #ff0000;"&gt; class</span><span style="color: #0000ff;"&gt;="btn btn-primary"</span><span style="color: #ff0000;"&gt; onclick</span><span style="color: #0000ff;"&gt;="SaveImport()"</span><span style="color: #0000ff;"&gt;></span>保存<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;button</span><span style="color: #0000ff;"&gt;></span>
        <span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;div</span><span style="color: #0000ff;"&gt;></span>
    <span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;div</span><span style="color: #0000ff;"&gt;></span>
<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;div</span><span style="color: #0000ff;"&gt;></span>

<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>

对于bootstrap fileinput的各种属性,我们这里使用JS进行初始化,这样方便统一管理和修改。

$("#AttachGUID" $(</span>"#excelFile"<span style="color: #000000;"&gt;).fileinput({ uploadUrl: </span>"/FileUpload/Upload",<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;上传的地址</span> uploadAsync: <span style="color: #0000ff;"&gt;true</span>,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;异步上传</span> language: "zh",<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;设置语言</span> showCaption: <span style="color: #0000ff;"&gt;true</span>,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否显示标题</span> showUpload: <span style="color: #0000ff;"&gt;true</span>,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否显示上传按钮</span> showRemove: <span style="color: #0000ff;"&gt;true</span>,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否显示移除按钮</span> showPreview : <span style="color: #0000ff;"&gt;true</span>,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否显示预览按钮</span> browseClass: "btn btn-primary",<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;按钮样式 </span> dropZoneEnabled: <span style="color: #0000ff;"&gt;false</span>,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否显示拖拽区域</span> allowedFileExtensions: ["xls","xlsx"],<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;接收的文件后缀</span> maxFileCount: 1,<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;最大上传文件数限制</span> previewFileIcon: '<i class="glyphicon glyphicon-file"&gt;</i>'<span style="color: #000000;"&gt;,allowedPreviewTypes: </span><span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;,previewFileIconSettings: { </span>'docx': '<i class="glyphicon glyphicon-file"&gt;</i>'<span style="color: #000000;"&gt;,</span>'xlsx': '<i class="glyphicon glyphicon-file"&gt;</i>'<span style="color: #000000;"&gt;,</span>'pptx': '<i class="glyphicon glyphicon-file"&gt;</i>'<span style="color: #000000;"&gt;,</span>'jpg': '<i class="glyphicon glyphicon-picture"&gt;</i>'<span style="color: #000000;"&gt;,</span>'pdf': '<i class="glyphicon glyphicon-file"&gt;</i>'<span style="color: #000000;"&gt;,</span>'zip': '<i class="glyphicon glyphicon-file"&gt;</i>'<span style="color: #000000;"&gt;,},uploadExtraData: { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;上传的时候,增加的附加参数</span> folder: '数据导入文件',guid: $("#AttachGUID"<span style="color: #000000;"&gt;).val() } }) </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;文件上传完成后的事件</span> .on('fileuploaded',<span style="color: #0000ff;"&gt;function</span><span style="color: #000000;"&gt; (event,data,previewId,index) { </span><span style="color: #0000ff;"&gt;var</span> form = data.form,files = data.files,extra =<span style="color: #000000;"&gt; data.extra,response </span>= data.response,reader =<span style="color: #000000;"&gt; data.reader; </span><span style="color: #0000ff;"&gt;var</span> res = data.response; <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;返回结果</span> <span style="color: #0000ff;"&gt;if</span><span style="color: #000000;"&gt; (res.Success) { showTips(</span>'上传成功'<span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;var</span> guid = $("#AttachGUID"<span style="color: #000000;"&gt;).val(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;提示用户Excel格式是否正常,如果正常加载数据</span>

<span style="color: #000000;"> $.ajax({
url: '/TestUser/CheckExcelColumns?guid=' +<span style="color: #000000;"> guid,type: 'get'<span style="color: #000000;">,dataType: 'json'<span style="color: #000000;">,success: <span style="color: #0000ff;">function<span style="color: #000000;"> (data) {
<span style="color: #0000ff;">if<span style="color: #000000;"> (data.Success) {
InitImport(guid); <span style="color: #008000;">//<span style="color: #008000;">重新刷新表格数据
showToast("文件已上传,数据加载完毕!"<span style="color: #000000;">);

                            </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;重新刷新GUID,以及清空文件,方便下一次处理</span>

<span style="color: #000000;"> RefreshExcel();
}
<span style="color: #0000ff;">else<span style="color: #000000;"> {
showToast("上传的Excel文件检查不通过。请根据页面右上角的Excel模板格式进行数据录入。","error"<span style="color: #000000;">);
}
}
});
}
<span style="color: #0000ff;">else<span style="color: #000000;"> {
showTips('上传失败'<span style="color: #000000;">);
}
});
}

上面的逻辑具体就是,设置上传文件的后台页面为:/FileUpload/Upload,以及各种插件的配置参数,uploadExtraData里面设置的是提交的附加参数,也就是后台控制器接收的参数,其中

.on('fileuploaded', (event,index) {

的函数处理文件上传后的处理函数,如果上传文件返回的结果是成功的,那么我们再次调用ajax来检查这个Excel的字段是否符合要求,如下地址:

url: '/TestUser/CheckExcelColumns?guid=' + guid,

如果这个检查的后台返回成功的记录,那么再次需要把Excel记录提取出来预览,并清空bootstrap fileinput文件上传插件,方便下次上传文件。如下代码所示。

showToast("文件已上传,数据加载完毕!" </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;重新刷新GUID,以及清空文件,方便下一次处理</span>

<span style="color: #000000;"> RefreshExcel();
}
<span style="color: #0000ff;">else<span style="color: #000000;"> {
showToast("上传的Excel文件检查不通过。请根据页面右上角的Excel模板格式进行数据录入。","error"<span style="color: #000000;">);
}

其中RefreshExcel就是重新更新上传的附加参数值,方便下次上传,否则附加参数的值一直不变化,就会导致我们设置的GUID没有变化而出现问题。

"#AttachGUID"'#excelFile').fileinput('clear');
        <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;附加参数初始化后一直不会变化,如果需要发生变化,则需要使用refresh进行更新</span>
        $('#excelFile').fileinput('refresh'<span style="color: #000000;"&gt;,{
            uploadExtraData: { folder: </span>'数据导入文件',guid: $("#AttachGUID"<span style="color: #000000;"&gt;).val() },});
    }</span></pre>

而其中InitImport就是获取预览数据并展示在Bootstrap-table表格插件上的,关于这个插件的详细使用,可以回顾下随笔《》进行了解即可。

查询并绑定结果 url = "/TestUser/GetExcelData?guid=" += $('#gridImport'后台的URL(*) method: 'GET', striped: ,显示行间隔色 cache: ,属性(*) pagination: ,显示分页(*) sidePagination: "server",分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, pageSize: 100, pageList: [10,25,50,100], search: ,显示表格搜索 strictSearch: ,显示所有的列(选择显示的列) showRefresh: ,显示刷新按钮 minimumCountColumns: 2, clickToSelect: , uniqueId: "ID", queryParams: Box: 显示复选框 'Name''姓名''Mobile''手机''Email''邮箱''Homepage''主页''Hobby''兴趣爱好''Gender''性别''Age''年龄''BirthDate''出生日期''Height''身高''Note''备注'"数据加载失败!"

最后就是确认提交后,会通过JS提交数据到后台进行处理,如下代码所示。

</span><span style="color: #0000ff;"&gt;var</span> list = [];<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;构造集合对象</span> <span style="color: #0000ff;"&gt;var</span> rows = $import.bootstrapTable(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;getSelections</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;var</span> i = <span style="color: #800080;"&gt;0</span>; i < rows.length; i++<span style="color: #000000;"&gt;) { list.push({ </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Name</span><span style="color: #800000;"&gt;'</span>: rows[i].Name,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Mobile</span><span style="color: #800000;"&gt;'</span>: rows[i].Mobile,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Email</span><span style="color: #800000;"&gt;'</span>: rows[i].Email,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Homepage</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;: rows[i].Homepage,</span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Hobby</span><span style="color: #800000;"&gt;'</span>: rows[i].Hobby,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Gender</span><span style="color: #800000;"&gt;'</span>: rows[i].Gender,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Age</span><span style="color: #800000;"&gt;'</span>: rows[i].Age,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;BirthDate</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;: rows[i].BirthDate,</span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Height</span><span style="color: #800000;"&gt;'</span>: rows[i].Height,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;Note</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;: rows[i].Note }); } </span><span style="color: #0000ff;"&gt;if</span> (list.length == <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;) { showToast(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;请选择一条记录</span><span style="color: #800000;"&gt;"</span>,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;warning</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt;; } </span><span style="color: #0000ff;"&gt;var</span> postData = { <span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;list</span><span style="color: #800000;"&gt;'</span>: list };<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;可以<a href="https://www.jb51.cc/tag/zengjia/" target="_blank" class="keywords">增加</a>其他参数,如{ 'list': list,'Rucanghao': $("#Rucanghao").val() };</span> postData =<span style="color: #000000;"&gt; JSON.stringify(postData); $.ajax({ url: </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;/TestUser/SaveExcelData</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,type: </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;post</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,dataType: </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;json</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,contentType: </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;application/json;charset=utf-8</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,traditional: </span><span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;,success: function (data) { </span><span style="color: #0000ff;"&gt;if</span><span style="color: #000000;"&gt; (data.Success) { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;保存成功 1.<a href="https://www.jb51.cc/tag/guanbi/" target="_blank" class="keywords">关闭</a>弹出层,2.清空记录<a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a> 3.刷新主列表</span> showToast(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;保存成功</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); $(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;#import</span><span style="color: #800000;"&gt;"</span>).modal(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;hide</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); $(bodyTag).html(</span><span style="color: #800000;"&gt;""</span><span style="color: #000000;"&gt;); Refresh(); } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { showToast(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;保存失败:</span><span style="color: #800000;"&gt;"</span> + data.ErrorMessage,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;error</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); } },data: postData }); }</span></pre>

3、后台控制器代码分析

这里我们的JS代码里面,涉及了几个MVC后台方法处理:Upload、CheckExcelColumns、GetExcelData、SaveExcelData。这里分别进行介绍。

文件上传后台控制器方法如下所示。

上传附件到服务器上 上传目录 ActionResult Upload( guid,= HttpFileCollectionBase files </span>=<span style="color: #000000;"&gt; HttpContext.Request.Files; </span><span style="color: #0000ff;"&gt;if</span> (files != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { </span><span style="color: #0000ff;"&gt;foreach</span> (<span style="color: #0000ff;"&gt;string</span> key <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; files.Keys) { </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #0000ff;"&gt;#region</span> MyRegion<span style="color: #000000;"&gt; HttpPostedFileBase fileData </span>=<span style="color: #000000;"&gt; files[key]; </span><span style="color: #0000ff;"&gt;if</span> (fileData != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { HttpContext.Request.ContentEncoding </span>= Encoding.GetEncoding(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;UTF-8</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); HttpContext.Response.ContentEncoding </span>= Encoding.GetEncoding(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;UTF-8</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); HttpContext.Response.Charset </span>= <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;UTF-8</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; <a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="https://www.jb51.cc/tag/shangchuan/" target="_blank" class="keywords">上传</a>后的保存路径</span> <span style="color: #0000ff;"&gt;string</span> filePath = Server.MapPath(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;~/UploadFiles/</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); DirectoryUtil.AssertDirExist(filePath); </span><span style="color: #0000ff;"&gt;string</span> fileName = Path.GetFileName(fileData.FileName); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;原始<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a></span> <span style="color: #0000ff;"&gt;string</span> fileExtension = Path.GetExtension(fileName); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>扩展名 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;string saveName = Guid.NewGuid().ToString() + fileExtension; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;保存<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a></span>

<span style="color: #000000;">
FileUploadInfo info = <span style="color: #0000ff;">new<span style="color: #000000;"> FileUploadInfo();
info.FileData =<span style="color: #000000;"> ReadFileBytes(fileData);
<span style="color: #0000ff;">if (info.FileData != <span style="color: #0000ff;">null<span style="color: #000000;">)
{
info.FileSize =<span style="color: #000000;"> info.FileData.Length;
}
info.Category =<span style="color: #000000;"> folder;
info.FileName =<span style="color: #000000;"> fileName;
info.FileExtend =<span style="color: #000000;"> fileExtension;
info.AttachmentGUID =<span style="color: #000000;"> guid;

                        info.AddTime </span>=<span style="color: #000000;"&gt; DateTime.Now;
                        info.Editor </span>= CurrentUser.Name;<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>人</span>

<span style="color: #000000;">
result = BLLFactory<span style="color: #000000;">.Instance.Upload(info);
<span style="color: #0000ff;">if (!<span style="color: #000000;">result.Success)
{
LogTextHelper.Error(<span style="color: #800000;">"<span style="color: #800000;">上传文件失败:<span style="color: #800000;">" +<span style="color: #000000;"> result.ErrorMessage);
}
}
<span style="color: #0000ff;">#endregion<span style="color: #000000;">
}
<span style="color: #0000ff;">catch<span style="color: #000000;"> (Exception ex)
{
result.ErrorMessage =<span style="color: #000000;"> ex.Message;
LogTextHelper.Error(ex);
}
}
}
<span style="color: #0000ff;">else<span style="color: #000000;">
{
result.ErrorMessage = <span style="color: #800000;">"<span style="color: #800000;">fileData对象为空<span style="color: #800000;">"<span style="color: #000000;">;
}

        </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; ToJsonContent(result);
    }</span></pre>

文件上传处理后,返回一个通用的CommonResult 的结果对象,也方便我们在JS客户端进行判断处理。

而其中检查我们导入Excel的数据是否满足列要求的处理,就是判断它的数据列和我们预先设置好的列名是否一致即可。

columnString = </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 检查Excel<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>的字段是否包含了必须的字段 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<param name="guid"&gt;</span><span style="color: #008000;"&gt;附件的GUID</span><span style="color: #808080;"&gt;</param></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<returns></returns></span> <span style="color: #0000ff;"&gt;public</span> ActionResult CheckExcelColumns(<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; guid) { CommonResult result </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; CommonResult(); </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { DataTable dt </span>=<span style="color: #000000;"&gt; ConvertExcelFileToTable(guid); </span><span style="color: #0000ff;"&gt;if</span> (dt != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;检查列表是否包含必须的字段</span> result.Success =<span style="color: #000000;"&gt; DataTableHelper.ContainAllColumns(dt,columnString); } } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception ex) { LogTextHelper.Error(ex); result.ErrorMessage </span>=<span style="color: #000000;"&gt; ex.Message; } </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; ToJsonContent(result); }</span></pre>

而GetExcelData则是格式化Excel数据到具体的List集合里面,这样我们方便在客户端进行各种属性的操作,它的代码如下所示。

获取服务器上的Excel文件,并把它转换为实体列表返回给客户端 ActionResult GetExcelData( ( List</span><TestUserInfo> list = <span style="color: #0000ff;"&gt;new</span> List<TestUserInfo><span style="color: #000000;"&gt;(); DataTable table </span>=<span style="color: #000000;"&gt; ConvertExcelFileToTable(guid); </span><span style="color: #0000ff;"&gt;if</span> (table != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { </span><span style="color: #0000ff;"&gt;#region</span> 数据转换 <span style="color: #0000ff;"&gt;int</span> i = <span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;foreach</span> (DataRow dr <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; table.Rows) { </span><span style="color: #0000ff;"&gt;bool</span> converted = <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;; DateTime dtDefault </span>= Convert.ToDateTime(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;1900-01-01</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); DateTime dt; TestUserInfo info </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; TestUserInfo(); info.Name </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;姓名</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Mobile </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;手机</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Email </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;邮箱</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Homepage </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;主页</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Hobby </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;兴趣爱好</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Gender </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;性别</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Age </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;年龄</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString().ToInt32(); converted </span>= DateTime.TryParse(dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;出生日期</span><span style="color: #800000;"&gt;"</span>].ToString(),<span style="color: #0000ff;"&gt;out</span><span style="color: #000000;"&gt; dt); </span><span style="color: #0000ff;"&gt;if</span> (converted &amp;&amp; dt ><span style="color: #000000;"&gt; dtDefault) { info.BirthDate </span>=<span style="color: #000000;"&gt; dt; } info.Height </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;身高</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString().ToDecimal(); info.Note </span>= dr[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;备注</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].ToString(); info.Creator </span>=<span style="color: #000000;"&gt; CurrentUser.ID.ToString(); info.CreateTime </span>=<span style="color: #000000;"&gt; DateTime.Now; info.Editor </span>=<span style="color: #000000;"&gt; CurrentUser.ID.ToString(); info.EditTime </span>=<span style="color: #000000;"&gt; DateTime.Now; list.Add(info); } </span><span style="color: #0000ff;"&gt;#endregion</span><span style="color: #000000;"&gt; } </span><span style="color: #0000ff;"&gt;var</span> result = <span style="color: #0000ff;"&gt;new</span> { total = list.Count,rows =<span style="color: #000000;"&gt; list }; </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; ToJsonContent(result); }</span></pre>

另一个SaveExcelData的函数就是处理数据导入的最终处理函数,主要就是把集合写入到具体的数据库里面即可,具体代码如下所示。

上传的相关数据列表 ActionResult SaveExcelData(List= (list != && list.Count > 采用事务进行数据提交 DbTransaction trans </span>= BLLFactory<TestUser><span style="color: #000000;"&gt;.Instance.CreateTransaction(); </span><span style="color: #0000ff;"&gt;if</span> (trans != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;int seq = 1;</span> <span style="color: #0000ff;"&gt;foreach</span> (TestUserInfo detail <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; list) { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;detail.Seq = seq++;</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/zengjia/" target="_blank" class="keywords">增加</a>1</span> detail.CreateTime =<span style="color: #000000;"&gt; DateTime.Now; detail.Creator </span>=<span style="color: #000000;"&gt; CurrentUser.ID.ToString(); detail.Editor </span>=<span style="color: #000000;"&gt; CurrentUser.ID.ToString(); detail.EditTime </span>=<span style="color: #000000;"&gt; DateTime.Now; BLLFactory</span><TestUser><span style="color: #000000;"&gt;.Instance.Insert(detail,trans); } trans.Commit(); result.Success </span>= <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;; } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception ex) { LogTextHelper.Error(ex); result.ErrorMessage </span>=<span style="color: #000000;"&gt; ex.Message; trans.Rollback(); } } </span><span style="color: #0000ff;"&gt;#endregion</span><span style="color: #000000;"&gt; } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { result.ErrorMessage </span>= <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;导入信息不能为空</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; } </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; ToJsonContent(result); }</span></pre>

上面这几个函数代码一般是比较有规律的,不需要一个个去编写,一般通过代码生成工具Database2Sharp批量生成即可。这样可以有效提高Web的界面代码后台代码的开发效率,减少出错的机会。

整个导入Excel数据的处理过程,所有代码都贴出来了,基本上整个逻辑了解了就可以很好的了解这个过程的代码了。

原文链接:https://www.f2er.com/bootstrap/73639.html

猜你在找的Bootstrap相关文章