1. 程式人生 > >easyui控制元件

easyui控制元件

開發環境:WIN10+IE11,瀏覽器請使用IE10或以上版本

開發技術框架MVC4+JQuery Easyui+knockoutjs

效果為彈出小窗體,如下圖
在這裡插入圖片描述

1.前端cshtml檔案程式碼(只包含檔案上傳窗體)。注意form設定,必須使用form-data傳遞檔案。注意按鈕事件我這裡是封裝的data-bind=“click:closeImportClick”,不要照抄

html5可直接在input標籤file控制元件中設定accept屬性限制上傳檔案型別,設定multiple屬性可同時上傳多個檔案

請選擇檔案
上傳 關閉

2.ViewModel中js程式碼:定義上傳事件。注意使用ajax請求時,需要設定contentType: false,否則chrome和firefox不相容

//匯入事件,顯示匯入彈出視窗
this.importClick = function ()
{
    $('#import-excel-template').window('open')

document.getElementById(“importFileForm”).style.display = “block”;
}
//關閉匯入彈出視窗
this.closeImportClick = function () {
document.getElementById(‘fileImport’).value = null;
document.getElementById(‘fileName’).innerHTML = “”;
document.getElementById(‘uploadInfo’).innerHTML = “”;
$(’#import-excel-template’).window(‘close’)
}

//匯入檔案
this.importFileClick = function ()
{
    //獲取上傳檔案控制元件內容
    var file = document.getElementById('fileImport').files[0];
    //判斷控制元件中是否存在檔案內容,如果不存在,彈出提示資訊,阻止進一步操作
    if (file == null) { alert('錯誤,請選擇檔案'); return; }
    //獲取檔名稱
    var fileName = file.name;
    //獲取檔案型別名稱
    var file_typename = fileName.substring(fileName.lastIndexOf('.'), fileName.length);
    //這裡限定上傳檔案檔案型別必須為.xlsx,如果檔案型別不符,提示錯誤資訊
    if (file_typename == '.xlsx')
    {
        //計算檔案大小
        var fileSize = 0;
        //如果檔案大小大於1024位元組X1024位元組,則顯示檔案大小單位為MB,否則為KB
        if (file.size > 1024 * 1024) {

fileSize = Math.round(file.size * 100 / (1024 * 1024)) / 100;

if (fileSize > 10) {
alert(‘錯誤,檔案超過10MB,禁止上傳!’); return;
}
         fileSize = fileSize.toString() + ‘MB’;
}
else {
fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + ‘KB’;
}
//將檔名和檔案大小顯示在前端label文字中
document.getElementById(‘fileName’).innerHTML = “檔名: " + file.name + ',大小: ’ + fileSize + “”;
//獲取form資料
var formData = new FormData($(”#importFileForm")[0]);
//呼叫apicontroller後臺action方法,將form資料傳遞給後臺處理。contentType必須設定為false,否則chrome和firefox不相容
$.ajax({
url: “/api/Product/NewMaterialImport/PostExcelData”,
type: ‘POST’,
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returnInfo) {
//上傳成功後將控制元件內容清空,並顯示上傳成功資訊
document.getElementById(‘fileImport’).value = null;
document.getElementById(‘uploadInfo’).innerHTML = “” + returnInfo + “”;
},
error: function (returnInfo) {
//上傳失敗時顯示上傳失敗資訊
document.getElementById(‘uploadInfo’).innerHTML = “” + returnInfo + “”;
}
});
}
else {
alert(“檔案型別錯誤”);
//將錯誤資訊顯示在前端label文字中
document.getElementById(‘fileName’).innerHTML = “錯誤提示:上傳檔案應該是.xlsx字尾而不應該是” + file_typename + “,請重新選擇檔案
}
}

3.apicontroller程式碼

///
/// 將檔案上傳到指定路徑中儲存
///
/// 上傳檔案結果資訊
[System.Web.Http.HttpPost]
[ValidateInput(false)]
public string PostExcelData()
{
string info = string.Empty;
try
{
//獲取客戶端上傳的檔案集合
HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
//判斷是否存在檔案
if (files.Count > 0)
{
//獲取檔案集合中的第一個檔案(每次只上傳一個檔案)
HttpPostedFile file = files[0];
//定義檔案存放的目標路徑
string targetDir = System.Web.HttpContext.Current.Server.MapPath("~/FileUpLoad/Product");
//建立目標路徑
ZFiles.CreateDirectory(targetDir);
//組合成檔案的完整路徑
string path = System.IO.Path.Combine(targetDir, System.IO.Path.GetFileName(file.FileName));
//儲存上傳的檔案到指定路徑中
file.SaveAs(path);
info = “上傳成功”;
}
else
{
info = “上傳失敗”;
}
}
catch
{
info= “上傳失敗”;
}
return info;
}