jquery 多文件上傳,歡迎大家指正

来源:http://www.cnblogs.com/xinyangone/archive/2017/06/04/6939944.html
-Advertisement-
Play Games

最近公司做一個項目,其中用到了多圖片上傳.發現網上教程寫的很少.便自己寫了一個上傳的js. 用ajax 與 formdata上傳的. ...


最近公司做一個項目,其中用到了多圖片上傳.發現網上教程寫的很少.便自己寫了一個上傳的js. 用ajax 與 formdata上傳的. 這個東西不只是可以傳圖片,傳文件也是可以的只不過預覽的時候會顯示不出來圖片

先上前臺調用代碼

 

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <script src="Scripts/jquery-1.8.2.min.js"></script>
 7     <script src="Scripts/cs.js"></script>
 8     <link href="Scripts/tpsc.css" rel="stylesheet" />
 9     <script>
10 
11         $(function () {
12 
13             $.tpsc({
14                 id: "xinyang",
15                 url: "Content/jieshou.ashx",
16                 tpcall: function(thefile)  //圖片每載入一張,會調用一次,註意:此處不能使用alert()等阻塞方法,只允許存在單引號,雙引號會被轉義
17                 {
18                     $('.li_xinyang').mouseenter(function () {
19                         $(this).find('span').show();
20                     }).mouseleave(function () {
21                         $(this).find('span').hide();
22                     });
23                 },
24                 success: function(data)  //上傳成功後的回調方法
25                 {
26                     alert(data);
27                 },
28                 error:function(data)  //上傳失敗的回調方法
29                 {
30                     alert(data);
31                 }
32             });
33 
34         });
35     </script>
36 </head>
37 <body>
38    
39     <div id="xinyang" >
40 
41       
42 
43     </div>
44 </body>
45 </html>

 

 

下麵是上傳的js

 

思路: 把上傳的圖片全部放到一個數組中,並用 FileReader() 來展示圖片,這樣可以在上傳前就展示出圖片的樣子

 

  1  var object = {
  2     id: "",   //div的id,需要綁定的div
  3     url: "", //上傳的後臺地址
  4     //上傳文件類型,圖片or 文件  , 涉及後面展示的樣式不同
  5     //是否可以多選
  6     tpcall:function(data){}, //圖片上傳完成後的回調函數
  7     success: function (data) { },   //成功的方法,回調函數
  8     error: function (err) { }     //失敗的方法,回調函數
  9 }
 10 
 11 var fdata = new FormData();  //上傳文件用,把文件序列化成form格式
 12 
 13 var htm = "";
 14 
 15 var s = new Array();
 16 
 17 //刪除圖片
 18 function del(name, t) {
 19 
 20     for (var i = 0; i < s.length; i++) {
 21         if (s[i].name == name) {
 22             s.splice(i, 1);
 23             $(t).parent().remove();
 24         }
 25     }
 26 }
 27 
 28 //獲取文件,拼接展示到頁面
 29 function ch(fi, tpcall) {
 30 
 31 
 32     for (var i = 0; i < fi.length; i++) {
 33 
 34         var reader = new FileReader();
 35         s.push(fi[i]);
 36 
 37         reader.onload = (function (theFile) {
 38 
 39             return function (e) {
 40 
 41                 htm = $("#zhanshi_xinyang").html();
 42 
 43                 htm += "<li class=\"li_xinyang\">";
 44                 htm += "  <img class=\"img_xinyang\"  src=\"" + this.result + "\" />";
 45                 htm += "   <span  class=\"span_xinyang\" onclick=\"del('" + theFile.name + "',this)\">刪除</span>";
 46                 htm += "</li>";
 47                 $("#zhanshi_xinyang").html(htm);
 48                 tpcall(theFile);
 49 
 50             }
 51 
 52         })(fi[i]);
 53         reader.readAsDataURL(fi[i]);
 54 
 55 
 56     }
 57 
 58     $("#file_xinyang").val('');
 59 }
 60 
 61 
 62 
 63 //上傳圖片,採用formdata類型上傳
 64 function tj(url, sucess, err) {
 65 
 66 
 67     if (s.length == 0) {
 68         alert("請選擇文件");
 69         return;
 70     }
 71 
 72     for (var i = 0; i < s.length; i++) {
 73         fdata.append("tp" + i, s[i]);
 74     }
 75 
 76     $.ajax({
 77         url: url,
 78         type: "POST",
 79         data: fdata,
 80         contentType: false,
 81         processData: false,
 82     }).done(function (data) { sucess(data) }).fail(function (data) { err(data) });
 83 }
 84 
 85 //模擬點擊input file 按鈕
 86 function tianjia_xinyang() {
 87     $("#file_xinyang").click();
 88 }
 89 
 90 
 91 //引用後外面調用的方法
 92 jQuery.tpsc = function (object) {
 93     var sc = "";
 94 
 95     sc += " <div>";
 96     sc = "<input type=\"file\" id=\"file_xinyang\" multiple=\"multiple\" onchange=\"ch(this.files," + object.tpcall + ")\" style=\"display:none\" />";
 97     sc += "  <input class=\"btn_sc_xinyang\" type=\"button\" value=\"上傳\" onclick=\"tj('" + object.url + "'," + object.success + "," + object.error + ")\" />";
 98     sc += "       <input class=\"btn_tj_xinyang\" type=\"button\" value=\"添加\" onclick=\"tianjia_xinyang()\" />";
 99     sc += "</div>";
100 
101     sc += "<div>";
102     sc += "   <ul style=\" margin:0; width:99%; overflow:hidden\" id=\"zhanshi_xinyang\">";
103 
104     sc += "   </ul>";
105     sc += "</div>";
106 
107 
108     $("#" + object.id).html(sc);
109 
110 }

 

 

 

最後是css樣式,方便用戶自己定義,我是個沒有審美的人....樣式湊合看就可以了

 

 

 1 .btn_tj_xinyang{
 2 
 3 }
 4 .btn_sc_xinyang{
 5 
 6 }
 7 .li_xinyang{
 8     position: relative;
 9     float:left; 
10     padding:5px;
11     list-style:none;
12     width: 100px;
13     /*height: 100px;*/
14     border: 1px solid #DDDDDD;
15 }
16 .img_xinyang
17 {
18     display:block;
19     width: 100%;
20 }
21 .span_xinyang
22 {
23     position: absolute;
24     display:none; 
25     width:100%; 
26     height:30px; 
27     line-height:30px; 
28     background-color:rgba(0,0,0,0.5);
29     color: #ffffff;
30     text-align:center;
31     cursor:pointer;
32     bottom: 1px;
33     left: 0px;
34 }

 


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

-Advertisement-
Play Games
更多相關文章
  • HTML 一、簡介 1.HTML是超文本標記語言,標準通用標記語言下的一個應用,解釋性語言。 2.“超文本”就是指頁面內可以包含圖片、鏈接,甚至音樂、程式等非文字元素。 3.超文本標記語言的結構包括“頭”部分(英語:Head)、和“主體”部分(英語:Body),其中“頭”部提供關於網頁的信息,“主體 ...
  • 頭部 header 用於頭部 主要內容 main 用於主體內容(中部) 左側 main-left 左側佈局 右側 main-right 右側佈局 外套 wrap 用於最外層 導航條 nav 網頁菜單導航條 內容 content 用於網頁中部主體 底部 footer 用於底部 頭部 header 用於 ...
  • 【塊級標簽與行級標簽的區別】 1.塊級標簽: 預設寬度100%(獨占一行) 自動換行(右邊不能有任何東西) 可以使用css設置寬度高度 2.行級標簽: 內容寬度,由內容撐開(內容多寬,寬度就占多寬) 不會自動換行(從左往右依次排列) 【常見的行級標簽】 span(文本) img(圖片) em(強調) ...
  • 優雅降級(graceful degradation):一開始就構建站點的完整功能,然後針對瀏覽器測試和修複。 漸進增強(progressive enhancement):一開始只構建站點的最少特性,然後不斷針對各瀏覽器追加功能。優雅降級:使用優雅降級方案,Web站點在所有新式瀏覽器中都能正常工作,如 ...
  • [1]基礎 [2]代碼組織 [3]文件操作 [4]網路操作 [5] [6] ...
  • 前面的話 在HTTP部分,詳細介紹了URL的相關知識。而nodejs中的url模塊提供了一些實用函數,用於URL處理與解析。本文將詳細介紹nodeJS中的URL URL對象 解析 URL 對象有以下內容,依賴於他們是否在 URL 字元串里存在。任何不在 URL 字元串里的部分,都不會出現在解析對象里 ...
  • 先上html結構 如圖,這是前端進階經典書籍【鋒利的jquery】中的一個案例,使用attr方法給元素添加屬性以達到選中與取消效果。 要求:1. 點擊全選/全部選,改變下麵四個覆選框選中狀態; 2. 單獨點擊下方按鈕,只要存在未選中的,則上方全選/全不選為未選中狀態,全部選中,則上方全選/全不選也自 ...
  • 前面的話 本文將詳細介紹功能變數名稱解析模塊DNS 本地解析 dns模塊包含兩個類型的函數,其中一種是使用底層操作系統工具進行功能變數名稱解析的函數,並不須要進行網路通信。這類函數只有一個:dns.lookup() 【dns.lookup(hostname[, options], callback)】 該方法將功能變數名稱 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...