input(type='file')上傳多張照片並顯示,傳到後臺

来源:https://www.cnblogs.com/syp1Blog/archive/2018/12/21/10154423.html
-Advertisement-
Play Games

以下內容為網路摘抄和實踐修改所得,如有雷同,請諒解!!!! 1、首先是前端頁面代碼: 其中,<input type="file" id="file_input" name="filePath" multiple="multiple"/> ,需要設置multiple屬性 <style type="te ...


以下內容為網路摘抄和實踐修改所得,如有雷同,請諒解!!!!

 

1、首先是前端頁面代碼:

其中,<input type="file" id="file_input" name="filePath" multiple="multiple"/> ,需要設置multiple屬性

<style type="text/css">
.float{
float:left;
width : 100px;
height: 100px;
overflow: hidden;
border: 1px solid #CCCCCC;
border-radius: 10px;
padding: 5px;
margin: 5px;
}
img{
position: relative;
}
.result{
width: 100px;
height: 100px;
text-align: center;
box-sizing: border-box;
}


#file_input{
display: none;
}


.delete{
width: 100px;
height:100px;
position: absolute;
text-align: center;
line-height: 100px;
z-index: 10;
font-size: 30px;
background-color: rgba(255,255,255,0.8);
color: #777;
opacity: 0;
transition-duration: 0.7s;
-webkit-transition-duration: 0.7s;
}


.delete:hover{
cursor: pointer;
opacity: 1;
}
button {
border-color: #4898d5;
/*background-color: #2e8ded;*/
background-color:#62BF00;
color: #fff;
height: 28px;
line-height: 28px;
margin: 0 6px;
padding: 0 15px;
border: 1px solid #dedede;
border-radius: 2px;
font-weight: 400;
cursor: pointer;
text-decoration: none;
}
#submit {
background-color: #2e8ded;
}
#clear {
background-color: #FAAC58;
}

</style>


<body> <table style="width:100%;"> <tr> <td style="width:80%"> <label>請選擇圖像文件:</label> <button id="select">選擇圖片</button> @*<button id="add">追加圖片</button>*@ <button id="clear">清空圖片</button> @*<button id="submit" onclick="submitPhoto()" >上傳</button>*@ </td> <td style="width:20%"> <form id="form1" method="post" enctype="multipart/form-data" style="width:95%;text-align:right;"> <input type="file" id="file_input" name="filePath" multiple="multiple"/> </form> </td> </tr> </table> <div id="append" style="width:100%;height:5px;"></div> </body>

如圖:

 

 

2、寫選擇圖片(<button id="select">選擇圖片</button>)和清空圖片(<button id="clear">清空圖片</button>)的事件,圖片顯示和刪除的方法

  1 var input = document.getElementById("file_input");    
  2     var result;    
  3     var dataArr = []; // 儲存所選圖片的結果(文件名和base64數據)  
  4     var fd;  //FormData方式發送請求    
  5     var oSelect = document.getElementById("select");
  6     var oAdd = document.getElementById("add");
  7     var oSubmit = document.getElementById("submit");  
  8     var oInput = document.getElementById("file_input");
  9     var oClear = document.getElementById("clear");
 10      
 11     if(typeof FileReader==='undefined'){    
 12         alert("抱歉,你的瀏覽器不支持 FileReader");    
 13         input.setAttribute('disabled','disabled');    
 14     } else {
 15         input.addEventListener('change',readFile,false);    
 16     } 
 17     oSelect.onclick=function(){   
 18         oInput.value = "";
 19         //清空已選圖片  
 20         $('.float').remove();  
 21         dataArr = [];   
 22         index = 0;          
 23         oInput.click();   
 24     }   
 25   
 26     oClear.onclick = function () {
 27         oInput.value = "";
 28         //清空已選圖片  
 29         $('.float').remove();
 30         dataArr = [];
 31         index = 0;
 32     }
 33     
 34     function readFile() {
 35     fd = new FormData();
 36     var iLen = this.files.length;
 37     var index = 0;
 38     for (var i = 0; i < iLen; i++) {
 39         //if (!(input['value'].match(/.jpg|.gif|.png|.jpeg|.bmp/i))) {  //判斷上傳文件格式  
 40         if (!this.files[i].name.match(/.jpg|.gif|.png|.jpeg|.bmp/i)) {  //判斷上傳文件格式  
 41             return alert("上傳的圖片中含有格式不正確的圖片,請重新選擇!請選擇.jpg|.gif|.png|.jpeg|.bmp格式的圖片");
 42         }
 43         var filereader = new FileReader();
 44         filereader.index = i;
 45         fd.append(i, this.files[i]);
 46         filereader.readAsDataURL(this.files[i]);  //轉成base64    
 47         filereader.fileName = this.files[i].name;
 48 
 49         filereader.onload = function (e) {
 50             var imgMsg = {
 51                 name: this.fileName,//獲取文件名    
 52                 base64: this.result   //filereader.readAsDataURL方法執行完後,filereader.result里    
 53             }
 54             dataArr.push(imgMsg);
 55             result = '<div class="delete">delete</div><div class="result"><img src="' + this.result + '" alt=""/><br><span style="margin:0 auto;font-size:9px">' + imgMsg.name + '</span></div>';
 56             var div = document.createElement('div');
 57             div.innerHTML = result;
 58             div['className'] = 'float ';
 59             div['index'] = index;
 60             document.getElementsByTagName('body')[0].appendChild(div);    //插入dom樹    
 61             //document.getElementById('append').appendChild(div);
 62             var imgpic = div.getElementsByTagName('img')[0];
 63             imgpic.onload = function () {
 64                 var nowHeight = ReSizePic(this); //設置圖片大小    
 65                 this.parentNode.style.display = 'block';
 66                 var oParent = this.parentNode;
 67                 if (nowHeight) {
 68                     oParent.style.paddingTop = (oParent.offsetHeight - nowHeight) / 3 + 'px';
 69                 }
 70             }
 71 
 72 
 73             div.onclick = function () {
 74                 this.remove();                  // 在頁面中刪除該圖片元素  
 75                 delete dataArr[this.index];  // 刪除dataArr對應的數據  
 76 
 77             }
 78             index++;
 79         }
 80     }
 81 }
 82 
 83 
 84 
 85 
 86   function ReSizePic(ThisPic) {
 87     var RePicWidth = 100; //這裡修改為您想顯示的寬度值    
 88 
 89     var TrueWidth = ThisPic.width; //圖片實際寬度    
 90     var TrueHeight = ThisPic.height; //圖片實際高度    
 91 
 92     if (TrueWidth > TrueHeight) {
 93         //寬大於高    
 94         var reWidth = RePicWidth;
 95         ThisPic.width = reWidth;
 96         //垂直居中    
 97         var nowHeight = TrueHeight * (reWidth / TrueWidth);
 98         return nowHeight;  //將圖片修改後的高度返回,供垂直居中用    
 99     } else {
100         //寬小於高    
101         var reHeight = RePicWidth;
102         ThisPic.height = reHeight;
103     }
104 
105 
106 
107 
108 }
109 
110 
111     function submitPhoto() {
112         SubmitPhoto("ControllerName");
113     }

如圖:

 

  3、提交到後臺的方法

 1 function SubmitPhoto(controller) {
 2     if (!dataArr.length) {
 3         tipDialog("請選擇文件", 1000, 3);
 4         return;
 5     }
 6     Loading(true, "正在提交數據...");
 7     $("#form1").ajaxSubmit({
 8         url: "/" + controller + "/SubmitPhoto",
 9         type: 'POST',
10         //data : JSON.stringify(submitArr),    
11         dataType: 'json',
12         //processData: false,   用FormData傳fd時需有這兩項    
13         //contentType: false,    
14         success: function (data) {
15             Loading(false);
16 
17             layer.alert(data.Message, {
18                 skin: 'layui-layer-lan'
19                 , closeBtn: 0
20                 , anim: 4 //動畫類型
21                 , end: function () {
22                     var index = parent.layer.getFrameIndex(window.name); //獲取視窗索引
23                     parent.layer.close(index);  // 關閉layer
24                 }
25             });
26 
27 
28         }
29 
30     })
31 }

如圖:

 

4、後臺接收前臺傳過來的圖片數據進行處理

public ActionResult SubmitPhoto()
        {
            //如果上傳文件為空則返回
            if (Request.Files.Count > 0)
            {
                //文件名
                string fileName = "";                
                string code = "";
                List<string> noCodes = new List<string>();
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    fileName = Request.Files[i].FileName;

                    code = fileName.Substring(0, fileName.LastIndexOf('.'));

                    
                    User_EP_Boiler bolier = OperateContext.Current.BllContext.IUser_EP_BoilerBll.GetModel(c => c.No == code && c.DeleteMark == 0 && c.CompId == userContext.User.CompId);

                    if (bolier == null)
                    {
                        noCodes.Add(code);
                        continue;
                    }

                    string ext = Path.GetExtension(fileName).ToLower();
                    string filename = Guid.NewGuid().ToString() + ext;
                    string pathServer = "../Upload/" + userContext.Company.BranchStr + "/User_EPPhotos/" + filename;
                    bool result = false;

                    bolier.Photos = filename;

                    result = OperateContext.Current.BllContext.IUser_EP_BoilerBll.Modify(bolier);

                    if (result)
                    {
                        Request.Files[i].SaveAs(IOHelper.GetMapPath(pathServer));
                    }
                    else
                    {
                        noCodes.Add(code);
                        continue;
                    }

                }
                if (noCodes.Count <= 0)
                {
                    return Json(new MsgModel() { Message = "全部操作成功", State = 1, Code = 1 }, "text/html");
                }
                else
                {
                    string result = "";
                    foreach (string codestr in noCodes)
                    {
                        result += codestr + ",";
                    }
                    result = result.Substring(0, result.Length - 1);
                    result += "";
                    string message = "";
                    if (noCodes.Count == Request.Files.Count)
                    {
                        message = "圖像對應的特種設備編號不存在或者操作失敗";
                    }
                    else
                    {
                        message = "部分操作成功,圖像對應的特種設備編號:" + result + "不存在或者操作失敗";
                    }
                    return Json(new MsgModel() { Message = message, State = 1, Code = 1 }, "text/html");
                }

            }
            else
            { return Json(new MsgModel() { Message = "請上傳文件", State = 0 }); }
        }

 

頁面有些地方使用了easyui和bootstrap的一些內容。。。沒有顯示出來。

記錄下來,以免忘記,以後方便使用。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網上查詢過很多關於ASP.NET core使用SignalR的簡單例子,但是大部分都是簡易聊天功能,今天心血來潮就搞了個使用SignalR進行服務間調用的簡單DEMO。 至於SignalR是什麼我就不多說了,微軟官方文檔也不少。 第一步新建項目 所有VS開發第一步都是新建一個解決方案哈,這裡我就不多 ...
  • 一、前言 1、本教程主要內容 ASP.NET Core MVC (Razor)分部視圖簡介 ASP.NET Core MVC (Razor)分部視圖基礎教程 ASP.NET Core MVC (Razor)強類型分部視圖教程 2、本教程環境信息 本篇代碼以下代碼進行調整:https://github ...
  • @Html.Raw 定義:在有些情況下,需要顯式地渲染一些不應該採用HTML編碼的值,這時可以採用Html.Raw方法來保證該值不被編碼;簡單來說:就是使用了Html.Raw後,字元串會以一個html方式呈現,而不使用該方法字元串會以原始字元串的形式出現。 eg: 效果如下(註意上下順序與view中 ...
  • RenderBody 在Razor引擎中沒有了“母版頁”,取而代之的是叫做“佈局”的頁面(_Layout.cshtml)放在了共用視圖文件夾中。在這個頁面中,會看到 標簽里有這樣一條語句: 其實它的作用和母版頁中的伺服器控制項類似,當創建基於此佈局頁面的視圖時,視圖的內容會和佈局頁面合併,而新創建視圖 ...
  • 使用mvc綁定表單 每次綁定的對象都為null,查看Request.Form裡面是有傳進去的參數的,並且屬性名稱完全一樣,最後發現是 變數的命名不能和屬性裡面的欄位一樣 一樣的話綁定表單失敗 ...
  • C# -- 使用 Task 執行多線程任務 1. 使用 Task 執行多線程任務 執行結果: 2. 等待Task多線程任務執行完成 執行結果: ...
  • "Asp.NetCore程式發佈到CentOs(含安裝部署netcore) 最佳實踐(一)" 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安裝nginx 首先,我們需要在伺服器上安裝Nginx。 "參考網址" 3.1.1:添加Nginx存儲庫 要添加CentOS 7 EPEL倉庫, ...
  • 前言 & 問題 如下截圖,TextBox,在觸摸點擊後,會自動彈出windows的虛擬鍵盤。 如何,禁用鍵盤的自動彈出? 調用虛擬鍵盤 通過調用TapTip.exe或者osk.exe,主動彈出虛擬鍵盤 詳細調用可參考:c#調用windows虛擬鍵盤 如何禁用鍵盤的彈出 TextBox在觸摸點擊後,會 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...