基於Metronic的Bootstrap開發框架經驗總結(7)--資料的匯入、匯出及附件的檢視處理
在很多系統模組裡面,我們可能都需要進行一定的資料交換處理,也就是資料的匯入或者匯出操作,這樣的批量處理能給系統使用者更好的操作體驗,也提高了使用者錄入資料的效率。我在較早時期的EasyUI的Web框架上,也介紹過通過Excel進行的資料匯入匯出操作,隨筆文章為《基於MVC4+EasyUI的Web開發框架經驗總結(10)--在Web介面上實現資料的匯入和匯出》,本文基於Bootstrap的框架基礎上,再對這個模組進行更新處理,以及Office文件或者圖片等附件的檢視處理。
1、資料的匯入操作
一般系統模組裡面,都有資料匯入和匯出操作,因此在介面自動生成的時候,我都傾向於給使用者自動生成這些標準的查詢、匯入、匯出等操作功能,介面效果如下所示。
匯入操作,在Bootstrap框架裡面,我把它作為一個層的,都統一放在index.cshtml檔案裡面,這樣可以使得整個介面的處理更加緊密一點,示例程式碼如下所示。
下面這些程式碼一般情況下,都是自動生成的,包括所需的全部欄位,我們一般是根據需要進行欄位的裁剪,以適應我們的業務和實際需要。
<!--匯入資料操作層--> <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/User-模板.xls" onclick="javascript:Preview();"> <img alt="測試使用者資訊-模板" src="~/Content/images/ico_excel.png" /> <span style="font-size:larger;font-weight:200;color:red">User-模板.xls</span> </a> </div> <hr/> <form id="ffImport" method="post"> <div title="Excel匯入操作" style="padding: 5px" data-options="iconCls:'icon-key'"> <input class="easyui-validatebox" type="hidden" id="AttachGUID" name="AttachGUID" /> <input id="file_upload" name="file_upload" type="file" multiple="multiple"> <a href="javascript:;" class="btn btn-primary" id="btnUpload" onclick="javascript: $('#file_upload').uploadify('upload', '*')">上傳</a> <a href="javascript:;" class="btn btn-default" id="btnCancelUpload" onclick="javascript: $('#file_upload').uploadify('cancel', '*')">取消</a> <div id="fileQueue" class="fileQueue"></div> <br /> <hr style="width:98%" /> <div id="div_files"></div> <br /> </div> </form> <!--資料顯示錶格--> <table id="gridImport" class="table table-striped table-bordered table-hover" cellpadding="0" cellspacing="0" border="0" class="display" width="100%"> <thead id="gridImport_head"> <tr> <th class="table-checkbox" style="width:40px"><input class="group-checkable" type="checkbox" onclick="selectAll(this)"></th> <th>使用者編碼</th> <th>使用者名稱/登入名</th> <th>真實姓名</th> <th>職務頭銜</th> <th>行動電話</th> <th>辦公電話</th> <th>郵件地址</th> <th>性別</th> <th>QQ號碼</th> <th>備註</th> </tr> </thead> <tbody id="gridImport_body"></tbody> </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>
我們如果要顯示匯入操作介面,那麼只需要把這個層顯示出來即可,如下指令碼所示。
//顯示匯入介面 function ShowImport() { $("#import").modal("show"); }
這裡的檔案上傳處理,主要使用了Uploadify的這個控制元件進行處理的,當然也可以利用我前面介紹過的File Input上傳控制元件進行處理,都可以很好實現這些匯入操作。
一般情況下的Uploadify控制元件的初始化程式碼如下所示
$(function () { //新增介面的附件管理 $('#file_upload').uploadify({ 'swf': '/Content/JQueryTools/uploadify/uploadify.swf', //FLash檔案路徑 'buttonText': '瀏 覽', //按鈕文字 'uploader': '/FileUpload/Upload', //處理上傳的頁面 'queueID': 'fileQueue', //佇列的ID 'queueSizeLimit': 1, //佇列最多可上傳檔案數量,預設為999 'auto': false, //選擇檔案後是否自動上傳,預設為true 'multi': false, //是否為多選,預設為true 'removeCompleted': true, //是否完成後移除序列,預設為true 'fileSizeLimit': '10MB', //單個檔案大小,0為無限制,可接受KB,MB,GB等單位的字串值 'fileTypeDesc': 'Excel Files', //檔案描述 'fileTypeExts': '*.xls', //上傳的檔案字尾過濾器 'onQueueComplete': function (event, data) { //所有佇列完成後事件 //業務處理程式碼 //提示使用者Excel格式是否正常,如果正常載入資料 }, 'onUploadStart': function (file) { InitUpFile();//上傳檔案前 ,重置GUID,每次不同 $("#file_upload").uploadify("settings", 'formData', { 'folder': '資料匯入檔案', 'guid': $("#AttachGUID").val() }); //動態傳引數 }, 'onUploadError': function (event, queueId, fileObj, errorObj) { //alert(errorObj.type + ":" + errorObj.info); } }); });
關鍵的邏輯就是:
//業務處理程式碼
一般情況下,我們在這裡已經在伺服器裡面獲得了Excel檔案了,因此需要對這個檔案的格式進行處理,如果格式正確,那麼我們把資料顯示出來,供匯入使用者進行記錄的選擇,決定匯入那些記錄即可。
處理檢查Excel資料格式的程式碼如下所示。
//提示使用者Excel格式是否正常,如果正常載入資料 $.ajax({ url: '/User/CheckExcelColumns?guid=' + guid, type: 'get', dataType: 'json', success: function (data) { if (data.Success) { InitGrid(); //重新重新整理表格資料 showToast("檔案已上傳,資料載入完畢!"); } else { showToast("上傳的Excel檔案檢查不通過。請根據頁面右上角的Excel模板格式進行資料錄入。", "error"); } } });
我們就是在後臺增加一個CheckExcelColumns的方法,用來檢查Excel檔案的欄位格式的,只有符合格式要求的檔案,才被獲取資料並顯示在介面上。
顯示在介面上的JS程式碼,也就是主要把Excel檔案的內容提取出來,並繫結在Table元素上即可。
//根據條件查詢並繫結結果 function InitGrid() { var guid = $("#AttachGUID").val(); var url = "/User/GetExcelData?guid=" + guid; $.getJSON(url, function (data) { $("#gridImport_body").html(""); $.each(data.rows, function (i, item) { var tr = "<tr>"; tr += "<td><input class='checkboxes' type=\"checkbox\" name=\"checkbox\" ></td>"; tr += "<td>" + item.HandNo + "</td>"; tr += "<td>" + item.Name + "</td>"; tr += "<td>" + item.FullName + "</td>"; tr += "<td>" + item.Title + "</td>"; tr += "<td>" + item.MobilePhone + "</td>"; tr += "<td>" + item.OfficePhone + "</td>"; tr += "<td>" + item.Email + "</td>"; tr += "<td>" + item.Gender + "</td>"; tr += "<td>" + item.QQ + "</td>"; tr += "<td>" + item.Note + "</td>"; tr += "</tr>"; $("#gridImport_body").append(tr); }); }); }
為了更進一步獲取使用者匯入到具體的部門,那麼我們還可以彈出一個對話方塊用然後選擇具體的資訊,最後才提交資料到後臺進行處理。
操作程式碼如下所示。
//儲存匯入的資料 function SaveImport() { //賦值給物件 $("#Company_ID3").select2("val", @Session["Company_ID"]).trigger('change'); $("#Dept_ID3").select2("val", @Session["Dept_ID"]).trigger('change'); $("#selectDept").modal("show"); }
這樣我們確認儲存的時候,只需要通過Ajax把資料提交給後臺處理即可,具體JS程式碼如下所示。
$.ajax({ url: '/User/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 });
2、資料的匯出操作
資料的匯出操作相對比較簡單,一般情況下,我們把資料寫入一個固定的Excel表裡面,然後提供URL給使用者下載即可。
//匯出Excel資料 function ShowExport() { var url = "/User/Export"; var condition = $("#ffSearch").serialize();//獲取條件 executeExport(url, condition);//執行匯出 }
具體的邏輯程式碼如下所示
//執行匯出操作,輸出檔案 function executeExport(url, condition) { $.ajax({ type: "POST", url: url, data: condition, success: function (filePath) { var downUrl = '/FileUpload/DownloadFile?file=' + filePath; window.location = downUrl; } }); }
3、附件的檢視處理
多數情況下,我們可能需要檢視上傳的檔案,包括Office文件、圖片等可以進行預覽的,是在不行,可以提供下載本地開啟檢視。
我在基於EasyUI的Web開發也介紹了Office的預覽處理:《基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文件的預覽》,這裡我們改進一下即可實現具體的Office預覽和圖片檢視功能了。
上篇檔案介紹了Office的預覽有兩種途徑,一種是利用微軟Office的預覽地址進行預覽,一種是用控制元件生成HTML進行預覽,兩種可以結合使用,根據需要進行配置即可。
/// <summary> /// 根據附件ID,獲取對應檢視的檢視URL。 /// 一般規則如果是圖片檔案,返回檢視URL地址'/FileUpload/ViewAttach'; /// 如果是Office檔案(word、PPT、Excel)等,可以通過微軟的線上檢視地址進行檢視:'http://view.officeapps.live.com/op/view.aspx?src=', /// 也可以進行本地生成HTML檔案檢視。如果是其他檔案,可以直接下載地址。 /// </summary> /// <param name="id">附件的ID</param> /// <returns></returns> public ActionResult GetAttachViewUrl(string id) { string viewUrl = ""; FileUploadInfo info = BLLFactory<FileUpload>.Instance.FindByID(id); if (info != null) { string ext = info.FileExtend.Trim('.').ToLower(); string filePath = GetFilePath(info); bool officeInternetView = false;//是否使用網際網路線上預覽 string hostName = HttpUtility.UrlPathEncode("http://www.iqidi.com/");//可以配置一下,如果有必要 if (ext == "xls" || ext == "xlsx" || ext == "doc" || ext == "docx" || ext == "ppt" || ext == "pptx") { if (officeInternetView) { //返回一個微軟線上瀏覽Office的地址,需要加上網際網路域名或者公網IP地址 viewUrl = string.Format("http://view.officeapps.live.com/op/view.aspx?src={0}{1}", hostName, filePath); } else { #region 動態第一次生成檔案 //檢查本地Office檔案是否存在,如不存在,先生成檔案,然後返回路徑供檢視 string webPath = string.Format("/GenerateFiles/Office/{0}.htm", info.ID); string generateFilePath = Server.MapPath(webPath); if (!FileUtil.FileIsExist(generateFilePath)) { string templateFile = BLLFactory<FileUpload>.Instance.GetFilePath(info); templateFile = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, templateFile.Replace("\\", "/")); if (ext == "doc" || ext == "docx") { Aspose.Words.Document doc = new Aspose.Words.Document(templateFile); doc.Save(generateFilePath, Aspose.Words.SaveFormat.Html); } else if (ext == "xls" || ext == "xlsx") { Workbook workbook = new Workbook(templateFile); workbook.Save(generateFilePath, SaveFormat.Html); } else if (ext == "ppt" || ext == "pptx") { templateFile = templateFile.Replace("/", "\\"); PresentationEx pres = new PresentationEx(templateFile); pres.Save(generateFilePath, Aspose.Slides.Export.SaveFormat.Html); } } #endregion viewUrl = webPath; } } else { viewUrl = filePath; } } return Content(viewUrl); }
通過這個後臺處理程式碼,我們可以正確知道Office預覽的時候,使用的是哪個URL了。
這樣在前端頁面,我們只需要判斷具體是那種檔案,然後進行展示即可了。
if(type =="image") { var imgContent = '<img src="'+ viewUrl + '" />'; $("#divViewFile").html(imgContent); $("#file").modal("show"); } else { $.ajax({ type: 'GET', url: viewUrl, //async: false, //同步 //dataType: 'json', success: function (json) { $("#divViewFile").html(json); $("#file").modal("show"); }, error: function (xhr, status, error) { showError("操作失敗" + xhr.responseText); //xhr.responseText } }); }
其中的程式碼
$("#file").modal("show");
是我們呼叫全域性對話方塊,用來展示具體的內容的,效果如下所示。
word文件預覽效果如下所示:
或者我們檢視圖片檔案的時候,可以獲得介面效果如下所示:
以上就是 資料的匯入、匯出及附件的檢視處理的介紹內容,希望對大家學習有幫助。
如果有興趣,可以繼續參考系列文章:
相關推薦
基於MVC4+EasyUI的Web開發框架經驗總結(7)--實現省份、城市、行政區三者聯動
為了提高客戶體驗和進行一些技術探索,現在正準備把我自己的客戶關係管理系統CRM在做一個Web的版本,因此對基於MVC的Web介面繼續進行一些研究和優化,力求在功能和介面上保持和Winform一致,本文主要介紹在我的CRM系統中用到的全國省份、城市、行政區三者的兩種效果,在Winform上實現沒問題,在Web上
基於Metronic的Bootstrap開發框架經驗總結(7)--資料的匯入、匯出及附件的檢視處理
在很多系統模組裡面,我們可能都需要進行一定的資料交換處理,也就是資料的匯入或者匯出操作,這樣的批量處理能給系統使用者更好的操作體驗,也提高了使用者錄入資料的效率。我在較早時期的EasyUI的Web框架上,也介紹過通過Excel進行的資料匯入匯出操作,隨筆文章為《基於MVC4+EasyUI的Web開發框架經驗總
(轉)基於MVC4+EasyUI的Web開發框架經驗總結(5)--使用HTML編輯控件CKEditor和CKFinder
err config 兩個 腳本 web開發 upload asp 正常 初始 http://www.cnblogs.com/wuhuacong/p/3780356.html Web開發上有很多HTML的編輯控件,如CKEditor、kindeditor等等,很多都做的很
(轉)基於MVC4+EasyUI的Web開發框架經驗總結(2)- 使用EasyUI的樹控件構建Web界面
set 應用 get ember trim ase str zab ble http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在用戶體驗和界面設計方面,和Winfor
(轉)基於MVC4+EasyUI的Web開發框架經驗總結(6)--在頁面中應用下拉列表的處理
ica new web開發 don ext images 如果 bob 獲取 http://www.cnblogs.com/wuhuacong/p/3840321.html 在很多Web界面中,我們都可以看到很多下拉列表的元素,有些是固定的,有些是動態的;有些是字典內容,
(轉)基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽
討論 off info code .cn viewer 存在 nco app http://www.cnblogs.com/wuhuacong/p/3871991.html 基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽
基於Metronic的Bootstrap開發框架經驗總結(17)-- 使用 summernote插件實現HTML文檔的編輯和圖片插入操作
系統 cat 寫入 視頻 編寫 查看 absolute upload form 在很多場合,我們需要在線編輯HTML內容,然後在頁面上或者其他終端上(如小程序、APP應用等)顯示,編輯HTML內容的插件有很多,本篇介紹基於Bootstrap的 summernote插件實現H
基於Metronic的Bootstrap開發框架經驗總結(18)-- 在代碼生成工具Database2Sharp中集成對Bootstrap-table插件的分頁及排序支持
關註 基礎 表頭 數據 database 一定的 處理 tree的使用 適合 在我們開發系統界面,包括Web和Winform的都一樣,主要的界面就是列表展示主界面,編輯查看界面,以及一些輔助性的如導入界面,選擇界面等,其中列表展示主界面是綜合性的數據展示界面,一般往往需要對
基於MVC4+EasyUI的Web開發框架經驗總結(1)-利用jQuery Tags Input 外掛顯示選擇記錄
最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不
基於Metronic的Bootstrap開發框架經驗總結(5)--Bootstrap檔案上傳外掛File Input的使用
Bootstrap檔案上傳外掛File Input是一個不錯的檔案上傳控制元件,但是搜尋使用到的案例不多,使用的時候,也是一步一個腳印一樣摸著石頭過河,這個控制元件在介面呈現上,叫我之前使用過的Uploadify 好看一些,功能也強大些,本文主要基於我自己的框架程式碼案例,介紹其中檔案上傳外掛File Inp
基於Metronic的Bootstrap開發框架經驗總結(4)--Bootstrap圖示的提取和利用
在前面的一篇隨筆《基於Metronic的Bootstrap開發框架經驗總結(1)-框架總覽及選單模組的處理》介紹了選單模組的處理,主要介紹如何動態從資料庫裡面獲取記錄並構建選單列表。其中選單資訊的圖示樣式,也是從資料庫裡面獲取的,因此要求我們能夠動態取得Bootstrap裡面的各種圖示定義了。本篇主要介紹如何
基於Metronic的Bootstrap開發框架經驗總結(1)-框架總覽及選單模組的處理
最近一直很多事情,部落格停下來好久沒寫了,整理下思路,把最近研究的基於Metronic的Bootstrap開發框架進行經驗的總結出來和大家分享下,同時也記錄自己對Bootstrap開發的學習研究的點點滴滴,希望在開一個《基於MVC4+EasyUI的Web開發框架經驗總結》的系列文章,逐步介紹這個響應式框架的點
基於Metronic的Bootstrap開發框架經驗總結(6)--對話方塊及提示框的處理和優化
在各種Web開發過程中,對話方塊和提示框的處理是很常見的一種介面處理技術,用得好,可以給使用者很好的頁面體驗,Bootstrap開發也一樣,我們往往在頁面新增、編輯、檢視詳細等介面使用彈出對話方塊層的方式進行顯示資料,刪除則可能使用一個提示確認框,如果操作成功,我們可以使用更豐富的提示框來處理,本篇主要對比說
基於Metronic的Bootstrap開發框架經驗總結(2)--列表分頁處理和外掛JSTree的使用
在上篇《基於Metronic的Bootstrap開發框架經驗總結(1)-框架總覽及選單模組的處理》介紹了Bootstrap開發框架的一些基礎性概括,包括總體介面效果,以及佈局、選單等內容,本篇繼續這一主題,介紹頁面內容常用到的資料分頁處理,以及Bootstrap外掛JSTree的使用。在資料的介面顯示當中,表
基於MVC4+EasyUI的Web開發框架經驗總結(3)- 使用Json實體類構建選單資料
最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不少經驗,本系列將主要介紹我在進一步
基於MVC4+EasyUI的Web開發框架經驗總結(13)--DataGrid控制元件實現自動適應寬頻高度
在預設情況下,EasyUI的DataGrid好像都沒有具備自動寬度的適應功能,一般是指定畫素寬度的,但是使用的人員計算機的螢幕解析度可能不一樣,因此導致有些地方顯示太大或者太小,總是不能達到好的預期效果,如果DataGrid能夠根據視窗尺寸進行伸縮,效果應該好很多。本文主要介紹DataGrid控制元件實現自動
基於Metronic的Bootstrap開發框架經驗總結(3)--下拉列表Select2外掛的使用
在上篇《基於Metronic的Bootstrap開發框架經驗總結(2)--列表分頁處理和外掛JSTree的使用》介紹了資料的分頁處理,使用了Bootstrap Paginator外掛,另外對樹形列表,採用了JSTree外掛,本篇繼續介紹在編輯頁面中常用到的控制元件Select2,這個控制元件可以更加豐富傳統的
基於MVC4+EasyUI的Web開發框架經驗總結(4)--使用圖表控制元件Highcharts
在我們做各種應用的時候,我們可能都會使用到圖表統計,以前接觸過一些不同的圖表控制元件,在無意中發現了圖表控制元件Highcharts,其強大的功能和豐富的互動效果,令人難以忘懷。本篇主要介紹在Web開發中使用圖表控制元件Highcharts,以及對其進行統一漢化等操作,讓我們的程式功能更加豐富,內容更加美觀。
基於MVC4+EasyUI的Web開發框架經驗總結(2)- 使用EasyUI的樹控制元件構建Web介面
最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不少經驗,本系列將主要介紹我在進一步
基於Metronic的Bootstrap開發框架經驗總結(9)--實現Web頁面內容的列印預覽和儲存操作
在前面介紹了很多篇相關的《Bootstrap開發框架》的系列文章,這些內容基本上覆蓋到了我這個Bootstrap框架的各個主要方面的內容,總體來說基本達到了一個穩定的狀態,隨著時間的推移可以會引入一些更好更新的內容進行完善,本篇繼續這個系列,主要介紹如何實現Web頁面內容的列印預覽和儲存操作。 1、Web頁