BootStrap Fileinput 플러그 인과 Bootstrap table 표 플러그 인 을 결합 하여 파일 업로드,미리 보기,제출 한 Excel 데이터 가 져 오기 작업 절 차 를 실현 합 니 다.

bootstrap-fileinput 원본 코드:https://github.com/kartik-v/bootstrap-fileinput
bootstrap-fileinput 온라인 API:http://plugins.krajee.com/file-input
boottstrap-fileinput 데모 전시:http://plugins.krajee.com/file-basic-usage-demo
이 플러그 인 은 주로 그림 업로드 처리 방법 을 소개 합 니 다.원래 제 Excel 가 져 오기 동작 은 Uploadify 플러그 인 을 사 용 했 습 니 다.제 수필 인첨부 파일 업로드 구성 요소 uploadify 사용을 참고 할 수 있 습 니 다.그러나 이것 은 Flash 컨트롤 지원 이 필요 합 니 다.일부 브 라 우 저(예 를 들 어 Chrome)에 서 는 짜증 이 나 서 일반적인 업로드 플러그 인 을 사용 하기 로 결 정 했 습 니 다.이번 에는 먼저 Bootstrap 전단 구 조 를 바탕 으로 하 는 프레임 워 크 시스템 을 업그레이드 하여 원래 의 Uploadify 플러그 인 을 대체 하면 페이지 업로드 기능 이 각 브 라 우 저 에서 차이 없 이 실 현 될 수 있 습 니 다.
일반적인 상황 에서 우 리 는 다음 두 개의 파일 을 도입 해 야 플러그 인 을 정상적으로 사용 할 수 있 습 니 다.

bootstrap-fileinput/css/fileinput.min.css
bootstrap-fileinput/js/fileinput.min.js
File input 플러그 인 을 사용 할 때 Asp.NET MVC 를 기반 으로 한다 면 BundleConfig.cs 를 사용 하여 해당 하 는 인용 을 추가 하고 Bundles 집합 인용 에 추가 하면 됩 니 다.

 //   bootstrap-fileinput     
 css_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/css/fileinput.min.css");
 js_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/js/fileinput.min.js");
 js_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/js/locales/zh.js");
페이지 에서 저 희 는 다음 과 같은 HTML 코드 를 사용 하여 인터페이스 전 시 를 실현 합 니 다.주요 boottstrap fileinput 플러그 인 성명 은 주로 기본 적 인 인터페이스 코드 입 니 다.

<input id="excelFile" type="file">
엑셀 이 가 져 온 인 터 페 이 스 는 다음 과 같다.

지정 한 파일 을 선택 하면 엑셀 의 파일 목록 을 볼 수 있 습 니 다.다음 화면 에서 보 여 줍 니 다.

파일 을 업로드 한 후 데 이 터 는 팝 업 층 의 목록 에 직접 전 시 됩 니 다.여 기 는 Bootstrap-table 표 플러그 인 을 직접 사용 하여 보 여 줍 니 다.

이렇게 하면 우 리 는 엑셀 의 기록 을 보 여 주 며 미리 보기 기능 을 실현 하고 필요 한 기록 을 선택 한 다음 에 저장 하면 서버 에 제출 하여 저장 할 수 있 으 며 엑셀 데이터 의 진정한 가 져 오기 데이터베이스 처 리 를 실현 할 수 있다.
2.엑셀 내 보 내기 작업 에 대한 상세 한 설명
우 리 는 실제 엑셀 을 가 져 오 는 인터페이스 에서 HTML 코드 는 다음 과 같다.

<!--       -->
<div id="import" class="modal fade bs-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 <div class="modal-dialog modal-lg">
 <div class="modal-content">
 <div class="modal-header bg-primary">
 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
 <h4 class="modal-title">    </h4>
 </div>
 <div class="modal-body">
 <div style="text-align:right;padding:5px">
  <a href="~/Content/Template/TestUser-  .xls" rel="external nofollow" onclick="javascript:Preview();">
  <img alt="      -  " src="~/Content/images/ico_excel.png" />
  <span style="font-size:larger;font-weight:200;color:red">TestUser-  .xls</span>
  </a>
 </div>
 <hr/>
 <form id="ffImport" method="post">
  <div title="Excel    " style="padding: 5px">
  <input type="hidden" id="AttachGUID" name="AttachGUID" /> 
  <input id="excelFile" type="file"> 
  </div>
 </form>
 <!--      -->
 <table id="gridImport" class="table table-striped table-bordered table-hover" cellpadding="0" cellspacing="0" border="0">
 </table>
 </div>
 <div class="modal-footer">
 <button type="button" class="btn btn-default" data-dismiss="modal">  </button>
 <button type="button" class="btn btn-primary" onclick="SaveImport()">  </button>
 </div>
 </div>
 </div>
</div>
boottstrap fileinput 의 각종 속성 에 대해 서 는 JS 를 사용 하여 초기 화 되 어 통일 적 으로 관리 하고 수정 할 수 있 습 니 다.     

 //   Excel     
 function InitExcelFile() {
 //  GUID
 $("#AttachGUID").val(newGuid());
 $("#excelFile").fileinput({
 uploadUrl: "/FileUpload/Upload",//     
 uploadAsync: true, //    
 language: "zh",  //    
 showCaption: true, //      
 showUpload: true, //        
 showRemove: true, //        
 showPreview : true, //        
 browseClass: "btn btn-primary", //     
 dropZoneEnabled: false, //        
 allowedFileExtensions: ["xls", "xlsx"], //       
 maxFileCount: 1,  //         
 previewFileIcon: '<i class="glyphicon glyphicon-file"></i>',
 allowedPreviewTypes: null,
 previewFileIconSettings: {
  'docx': '<i class="glyphicon glyphicon-file"></i>',
  'xlsx': '<i class="glyphicon glyphicon-file"></i>',
  'pptx': '<i class="glyphicon glyphicon-file"></i>',
  'jpg': '<i class="glyphicon glyphicon-picture"></i>',
  'pdf': '<i class="glyphicon glyphicon-file"></i>',
  'zip': '<i class="glyphicon glyphicon-file"></i>',
 },
 uploadExtraData: { //     ,       
  folder: '      ', guid: $("#AttachGUID").val()
 }
 }) //          
 .on('fileuploaded', function (event, data, previewId, index) {
 var form = data.form, files = data.files, extra = data.extra,
  response = data.response, reader = data.reader;
 var res = data.response; //    
 if (res.Success) {
  showTips('    ');
  var guid = $("#AttachGUID").val();
  //    Excel      ,        
  $.ajax({
  url: '/TestUser/CheckExcelColumns?guid=' + guid,
  type: 'get',
  dataType: 'json',
  success: function (data) {
  if (data.Success) {
  InitImport(guid); //        
  showToast("     ,      !");
  //    GUID,      ,       
  RefreshExcel();
  }
  else {
  showToast("   Excel       。         Excel          。", "error");
  }
  }
  });
 }
 else {
  showTips('    ');
 }
 });
 }
위의 논 리 는 구체 적 으로 파일 을 업로드 하 는 배경 페이지 를 설정 하 는 것 입 니 다./FileUpload/Upload,그리고 각종 플러그 인의 설정 매개 변수 입 니 다.upload ExtraData 에 제출 한 추가 매개 변수,즉 배경 컨트롤 러 가 받 은 매개 변수 가 설정 되 어 있 습 니 다.

.on('fileuploaded', function (event, data, previewId, index) {
의 함수 처리 파일 이 업 로드 된 후의 처리 함수 입 니 다.만약 에 파일 을 업로드 한 결과 가 성공 적 이 라면 저 희 는 ajax 를 다시 호출 하여 이 Excel 필드 가 요구 에 부합 되 는 지 확인 합 니 다.다음 주소:

url: '/TestUser/CheckExcelColumns?guid=' + guid,
이 검사 의 배경 에서 성공 적 인 기록 을 되 돌려 준다 면 엑셀 기록 을 미리 보기 로 추출 하고 boottstrap fileinput 파일 업로드 플러그 인 을 비우 면 다음 에 파일 을 업로드 할 수 있 습 니 다.다음 코드 와 같 습 니 다.

 if (data.Success) {
 InitImport(guid); //        
 showToast("     ,      !");
 //    GUID,      ,       
 RefreshExcel();
 }
 else {
 showToast("   Excel       。         Excel          。", "error");
 }
그 중에서 RefreshExcel 은 업 로드 된 추가 매개 변수 값 을 다시 업데이트 하여 다음 에 업로드 할 수 있 도록 하 는 것 입 니 다.그렇지 않 으 면 추가 매개 변수의 값 이 계속 변 하지 않 아서 저희 가 설정 한 GUID 에 변화 가 없어 문제 가 생 길 수 있 습 니 다.

 //    GUID  ,     
 function RefreshExcel() {
 $("#AttachGUID").val(newGuid());
 $('#excelFile').fileinput('clear');//      
 //              ,        ,     refresh    
 $('#excelFile').fileinput('refresh', {
 uploadExtraData: { folder: '      ', guid: $("#AttachGUID").val() },
 });
 }
그 중에서 Init Import 는 미리 보기 데 이 터 를 가 져 와 Bootstrap-table 표 플러그 인 에 보 여 주 는 것 입 니 다.이 플러그 인의 상세 한 사용 에 대해 서 는 에 세이'Metronic 기반 Bootstrap 개발 프레임 워 크 경험 총화(16)-플러그 인 bootstrap-table 로 표 기록 조회,페이지,정렬 등 처리'를 돌 이 켜 보면 됩 니 다.    

 //           
 var $import;
 function InitImport(guid) {
 var url = "/TestUser/GetExcelData?guid=" + guid;
 $import = $('#gridImport').bootstrapTable({
 url: url,  //     URL(*)
 method: 'GET',  //    (*)
 striped: true,  //        
 cache: false,  //      ,   true,                 (*)
 pagination: false,  //      (*)
 sidePagination: "server", //    :client     ,server     (*)
 pageNumber: 1,  //        ,     ,   
 pageSize: 100,  //       (*)
 pageList: [10, 25, 50, 100], //          (*)
 search: false,  //        
 strictSearch: true,
 showColumns: true,  //        (      )
 showRefresh: true,  //        
 minimumCountColumns: 2, //       
 clickToSelect: true, //         
 uniqueId: "ID",  //        ,      
 queryParams: function (params) { },
 columns: [{
  checkbox: true,
  visible: true  //        
 }, {
  field: 'Name',
  title: '  '
 }, {
  field: 'Mobile',
  title: '  '
 }, {
  field: 'Email',
  title: '  ',
  formatter: emailFormatter
 }, {
  field: 'Homepage',
  title: '  ',
  formatter: linkFormatter
 }, {
  field: 'Hobby',
  title: '    '
 }, {
  field: 'Gender',
  title: '  ',
  formatter: sexFormatter
 }, {
  field: 'Age',
  title: '  '
 }, {
  field: 'BirthDate',
  title: '    ',
  formatter: dateFormatter
 }, {
  field: 'Height',
  title: '  '
 }, {
  field: 'Note',
  title: '  '
 }],
 onLoadSuccess: function () {
 },
 onLoadError: function () {
  showTips("      !");
 },
 });
 }
마지막 으로 제출 을 확인 한 후 JS 를 통 해 데 이 터 를 백 엔 드 로 처리 합 니 다.다음 코드 와 같 습 니 다.    

 //       
 function SaveImport() {
 var list = [];//      
 var rows = $import.bootstrapTable('getSelections');
 for (var i = 0; i < rows.length; i++) {
 list.push({
  'Name': rows[i].Name, 'Mobile': rows[i].Mobile, 'Email': rows[i].Email, 'Homepage': rows[i].Homepage,
  'Hobby': rows[i].Hobby, 'Gender': rows[i].Gender, 'Age': rows[i].Age, 'BirthDate': rows[i].BirthDate,
  'Height': rows[i].Height, 'Note': rows[i].Note
 });
 }
 if (list.length == 0) {
 showToast("       ", "warning");
 return;
 }
 var postData = { 'list': list };//        , { 'list': list, 'Rucanghao': $("#Rucanghao").val() };
 postData = JSON.stringify(postData);
 $.ajax({
 url: '/TestUser/SaveExcelData',
 type: 'post',
 dataType: 'json',
 contentType: 'application/json;charset=utf-8',
 traditional: true,
 success: function (data) {
  if (data.Success) {
  //     1.     ,2.       3.     
  showToast("    ");
  $("#import").modal("hide");
  $(bodyTag).html("");
  Refresh();
  }
  else {
  showToast("    :" + data.ErrorMessage, "error");
  }
 },
 data: postData
 });
 }
3.백 스테이지 컨트롤 러 코드 분석
여기 서 우리 의 JS 코드 에는 몇 가지 MVC 배경 방법 처리 가 포함 되 어 있 습 니 다.Upload,CheckExcelColumns,GetExcelData,SaveExcelData.여기 서 따로 소개 하 겠 습 니 다.
파일 업로드 배경 컨트롤 러 방법 은 다음 과 같 습 니 다.      

 /// <summary>
 ///          
 /// </summary>
 /// <param name="fileData">    </param>
 /// <param name="guid">   GUID</param>
 /// <param name="folder">       </param>
 /// <returns></returns>
 [AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Upload(string guid, string folder)
 {
 CommonResult result = new CommonResult();
 HttpFileCollectionBase files = HttpContext.Request.Files;
 if (files != null)
 {
 foreach (string key in files.Keys)
 {
  try
  {
  #region MyRegion
  HttpPostedFileBase fileData = files[key];
  if (fileData != null)
  {
  HttpContext.Request.ContentEncoding = Encoding.GetEncoding("UTF-8");
  HttpContext.Response.ContentEncoding = Encoding.GetEncoding("UTF-8");
  HttpContext.Response.Charset = "UTF-8";
  //           
  string filePath = Server.MapPath("~/UploadFiles/");
  DirectoryUtil.AssertDirExist(filePath);
  string fileName = Path.GetFileName(fileData.FileName); //      
  string fileExtension = Path.GetExtension(fileName); //     
  //string saveName = Guid.NewGuid().ToString() + fileExtension; //      
  FileUploadInfo info = new FileUploadInfo();
  info.FileData = ReadFileBytes(fileData);
  if (info.FileData != null)
  {
  info.FileSize = info.FileData.Length;
  }
  info.Category = folder;
  info.FileName = fileName;
  info.FileExtend = fileExtension;
  info.AttachmentGUID = guid;
  info.AddTime = DateTime.Now;
  info.Editor = CurrentUser.Name;//   
  result = BLLFactory<FileUpload>.Instance.Upload(info);
  if (!result.Success)
  {
  LogTextHelper.Error("      :" + result.ErrorMessage);
  }
  } 
  #endregion
  }
  catch (Exception ex)
  {
  result.ErrorMessage = ex.Message;
  LogTextHelper.Error(ex);
  }
 }
 }
 else
 {
 result.ErrorMessage = "fileData    ";
 }
 return ToJsonContent(result);
 }
파일 업로드 처리 후 일반적인 CommonResult 결과 대상 으로 돌아 가 JS 클 라 이언 트 에서 판단 처리 할 수 있 습 니 다.
그 중에서 저희 가 엑셀 을 가 져 온 데이터 가 열 요 구 를 만족 시 키 는 지 확인 하 는 것 은 데이터 열 이 저희 가 미리 설정 한 열 이름과 일치 하 는 지 판단 하 는 것 입 니 다.    

 //           
 string columnString = "  ,  ,  ,  ,    ,  ,  ,    ,  ,  ";
 /// <summary>
 ///   Excel               
 /// </summary>
 /// <param name="guid">   GUID</param>
 /// <returns></returns>
 public ActionResult CheckExcelColumns(string guid)
 {
 CommonResult result = new CommonResult();
 try
 {
 DataTable dt = ConvertExcelFileToTable(guid);
 if (dt != null)
 {
  //             
  result.Success = DataTableHelper.ContainAllColumns(dt, columnString);
 }
 }
 catch (Exception ex)
 {
 LogTextHelper.Error(ex);
 result.ErrorMessage = ex.Message;
 }
 return ToJsonContent(result);
 }
한편,GetExcelData 는 Excel 데 이 터 를 구체 적 인 List집합 에 포맷 하여 클 라 이언 트 에서 각종 속성 을 조작 할 수 있 도록 합 니 다.코드 는 다음 과 같 습 니 다.     

 /// <summary>
 ///        Excel  ,                
 /// </summary>
 /// <param name="guid">   GUID</param>
 /// <returns></returns>
 public ActionResult GetExcelData(string guid)
 {
 if (string.IsNullOrEmpty(guid))
 {
 return null;
 }
 List<TestUserInfo> list = new List<TestUserInfo>();
 DataTable table = ConvertExcelFileToTable(guid);
 if (table != null)
 {
 #region     
 int i = 1;
 foreach (DataRow dr in table.Rows)
 {
  bool converted = false;
  DateTime dtDefault = Convert.ToDateTime("1900-01-01");
  DateTime dt;
  TestUserInfo info = new TestUserInfo();
  info.Name = dr["  "].ToString();
  info.Mobile = dr["  "].ToString();
  info.Email = dr["  "].ToString();
  info.Homepage = dr["  "].ToString();
  info.Hobby = dr["    "].ToString();
  info.Gender = dr["  "].ToString();
  info.Age = dr["  "].ToString().ToInt32();
  converted = DateTime.TryParse(dr["    "].ToString(), out dt);
  if (converted && dt > dtDefault)
  {
  info.BirthDate = dt;
  }
  info.Height = dr["  "].ToString().ToDecimal();
  info.Note = dr["  "].ToString();
  info.Creator = CurrentUser.ID.ToString();
  info.CreateTime = DateTime.Now;
  info.Editor = CurrentUser.ID.ToString();
  info.EditTime = DateTime.Now;
  list.Add(info);
 }
 #endregion
 }
 var result = new { total = list.Count, rows = list };
 return ToJsonContent(result);
 }
또 다른 SaveExcelData 의 함 수 는 데이터 가 져 오 는 최종 처리 함 수 를 처리 하 는 것 입 니 다.주로 집합 을 구체 적 인 데이터 베이스 에 기록 하면 됩 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.    

 /// <summary>
 ///               
 /// </summary>
 /// <param name="list">    </param>
 /// <returns></returns>
 public ActionResult SaveExcelData(List<TestUserInfo> list)
 {
 CommonResult result = new CommonResult();
 if (list != null && list.Count > 0)
 {
 #region           
 DbTransaction trans = BLLFactory<TestUser>.Instance.CreateTransaction();
 if (trans != null)
 {
  try
  {
  //int seq = 1;
  foreach (TestUserInfo detail in list)
  {
  //detail.Seq = seq++;//  1
  detail.CreateTime = DateTime.Now;
  detail.Creator = CurrentUser.ID.ToString();
  detail.Editor = CurrentUser.ID.ToString();
  detail.EditTime = DateTime.Now;
  BLLFactory<TestUser>.Instance.Insert(detail, trans);
  }
  trans.Commit();
  result.Success = true;
  }
  catch (Exception ex)
  {
  LogTextHelper.Error(ex);
  result.ErrorMessage = ex.Message;
  trans.Rollback();
  }
 }
 #endregion
 }
 else
 {
 result.ErrorMessage = "        ";
 }
 return ToJsonContent(result);
 }
위의 몇 가지 함수 의 코드 는 일반적으로 비교적 규칙 적 이 며,하나하나 작성 할 필요 가 없습니다.일반적으로 코드 생 성 도구 인 Database2Sharp 를 통 해 대량으로 생 성 하면 됩 니 다.이렇게 하면 웹 의 인터페이스 코드 와 배경 코드 의 개발 효율 을 효과적으로 향상 시 키 고 오류 의 기 회 를 줄 일 수 있다.
Excel 데 이 터 를 가 져 오 는 전체 처리 과정 에서 모든 코드 가 붙 어 있 습 니 다.기본적으로 전체 논 리 를 이해 하면 이 과정의 코드 를 잘 이해 할 수 있 습 니 다.
총결산
위 에서 설명 한 것 은 여러분 에 게 소 개 된 BootStrap Fileinput 플러그 인과 Bootstrap table 표 플러그 인 을 결합 하여 파일 업로드,미리 보기,제출 한 Excel 데이터 가 져 오기 작업 절 차 를 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기