亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

AngularJS+Bootstrap實現(xiàn)多文件上傳與管理

 更新時間:2016年11月08日 09:49:30   作者:郝凡  
這篇文章主要為大家詳細介紹了AngularJS+Bootstrap實現(xiàn)多文件上傳與管理,對上傳文件進行加載與刪除操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近一個項目中需要實現(xiàn)多文件上傳與管理,而項目是基于bootstrap開發(fā)的,所以查了一些bootstrap文件上傳插件,最后發(fā)現(xiàn)還是bootstrap-fileinput最美觀,該插件可以實現(xiàn)多文件的上傳與管理(插件官方地址:http://plugins.krajee.com/file-input),具體的效果如下:

 

(bootstrap-fileinput不局限于圖片上傳,也可以實現(xiàn)文件上傳,但圖片的縮略圖容易辨識,這里就以圖片上傳為例)

 該插件基本的操作可以參考:JS文件上傳神器bootstrap fileinput詳解,本文主要針對多文件管理。 

在講該插件如何使用前,先跟大家講一下項目中關于圖片管理的需求:

1、可以上傳多個圖片

2、只有當點擊保存按鈕時,圖片信息才保存至數(shù)據(jù)庫

3、可以加載已經(jīng)保存到數(shù)據(jù)庫的圖片信息,并提供刪除功能 

因此,我們可以規(guī)定幾個文件狀態(tài):

已選擇:已經(jīng)放入到插件中,但還沒有上傳到服務器。如上圖中第3個圖片,該圖片下方有上傳按鈕。

已上傳:已經(jīng)上傳到服務器,但圖片信息沒有保存到數(shù)據(jù)庫。如上圖中第2個圖片,該圖片下方有100%的進度條。

已保存:圖片信息已經(jīng)保存至數(shù)據(jù)庫的圖片,如上圖中第1張圖,這些圖片下方有刪除按鈕,點擊刪除時會將圖片信息從數(shù)據(jù)庫中刪除。 

一、引入必要文件

<link href="<%=path%>/static/css/bootstrap-3.3.5/bootstrap.min.css" rel="stylesheet">
<link href="<%=path%>/static/css/bootstrap-3.3.5/fileinput.css" rel="stylesheet">

<script src="<%=path%>/static/js/jquery-1.11.3.js"></script>
<script src="<%=path%>/static/js/angularjs-1.3.9/angular.min.js"></script>
<script src="<%=path%>/static/js/bootstrap-3.3.5/bootstrap.min.js"></script>
<script src="<%=path%>/static/js/bootstrap-3.3.5/fileinput.js"></script>
<script src="<%=path%>/static/js/bootstrap-3.3.5/fileinput_locale_zh.js"></script>

 

其中fileinput.js和fileinput_locale_zh.js都在插件待官方包中,angular.min.js和bootstrap.min.js就不多介紹了

二、多文件上傳

首先在頁面中定義file控件:

<input id="input-images" type="file" multiple class="file-loading" accept="image/*">

然后對該控件進行初始化,就可以實現(xiàn)該組件的多文件上傳了:

 $("#input-images").fileinput({
  uploadUrl: "<%=path%>" + "/album/pictureFileUpload",
  allowedFileExtensions: ["jpg", "png", "gif"],
  resizePreference: 'height',
  maxFileCount: 10,
  language: 'zh',
  overwriteInitial: false,
  resizeImage: true,
  });

當然,初始化時的屬性有很多,這里不一一介紹了,后臺代碼(使用JFinal)如下:

 public void pictureFileUpload() {
 UploadFile uploadFile = getFile();
 renderJson("{\"link\":" + "\"/fileinput/upload/" + uploadFile.getFileName()
 + "\"" + ",\"fileName\":\"" + uploadFile.getOriginalFileName()
 + "\"}");
 }

注意最后一定要返回Json,哪怕返回一個空json串(“{}”),返回的值保存在前臺的data.response中。

三、已有文件的加載與刪除

已有文件的加載是指將服務器上已經(jīng)存在的文件展示在該控件中,以實現(xiàn)文件管理,提供刪除功能,這主要依賴于initialPreview實現(xiàn)的。

將服務器上的文件名稱和文件地址獲取之后,使用initialPreview和initialPreviewConfig完成加載和定義刪除操作:

var initPreview = new Array();//展示元素
 var initPreviewConfig = new Array();//展示設置
 
 $.post(
 "<%=path%>" + "/album/getPicsByAlbum", 
 {albumId : albumId}, 
 function(result) {
 for(var i=0;i<result.length;i++){
   var pictureFile = result[i];
 //用于展示已經(jīng)上傳的圖片
  initPreview.push("<img src='" + pictureFile.PICADDRESS 
   + "' class='file-preview-image' alt='"+pictureFile.PICNAME+"' title='"+pictureFile.PICNAME+"'>");
  var config = new Object();
  config.caption = pictureFile.PICNAME;
  config.url="<%=path%>" + "/album/deletePicById";
  config.key=pictureFile.ID;
  initPreviewConfig.push(config);
 }
 initFileInput($scope);
  $("#input-images").fileinput('refresh', {
  initialPreview: initPreview,
  initialPreviewConfig: initPreviewConfig
  });
 }
 );

點擊刪除圖標,會默認把config中待key值傳至后臺,后臺中定義deletePicById方法即可:

 public void deletePicById() {
 String picId = getPara("key");
 service.deletePicById(Integer.valueOf(picId));
 renderJson("{}");
 }

四、幾點疑問的解答

1、為什么model里沒有屬性,卻可以在前端展示相關屬性?
這里主要使用了JFinal的ActiveRecord功能,無需定義屬性和setter,getter方法,屬性值被映射在model里的attrs里,這個屬性是<key, value>的鍵值對,而key值就是數(shù)據(jù)庫的字段名。 特別提醒:雖然SQL語句不分區(qū)大小寫,但字段名還是存在大小寫的,如果字段名是大寫的,那么映射到model里的key就是大寫的,同時JFinal的默認id為主鍵的策略也不能生效,需要在 configPlugin中設置,如下:arp.addMapping("pictures", "ID", Picture.class),建議大家按照Java命名規(guī)范命名數(shù)據(jù)庫字段。

2、(參考代碼)中初始化FileInput為什么要執(zhí)行clear,destory操作?

因為FileInput插件在選擇文件后,不管有沒有上傳,都會保留文件在file域中,因此再點擊時會顯示上一次選擇的文件,不符合多相冊管理的需求,原本以為clear操作就可以清空file域(官方文檔這么說的),但實際操作發(fā)現(xiàn)并沒有清空,因此才調用clear,destory后再重新初始化文件上傳控件。(這一點不太確定,希望有大神可以指點)

3、保存時怎么知道那些圖片需要存數(shù)據(jù)庫,這是基于什么實現(xiàn)的?

$scope上有個selectedPics數(shù)組,該屬性負責保存最終那些文件會保存到數(shù)據(jù)庫。在文件選擇后會將選擇待文件信息保存到這個數(shù)組中,但hasUpload屬性為false;在文件上傳后,會修改對應的hasUpload為true;在上傳成功后執(zhí)行刪除(還沒有保存到數(shù)據(jù)庫)會從數(shù)組中移除對應的元素。有人會問,那選擇文件后不上傳直接刪除,那文件信息豈不是會占用數(shù)據(jù)位置從而導致元素錯亂嗎?其實并不會,在fileuploaded事件中,哪些圖片已經(jīng)hasUpload,是直接改數(shù)組對應位置元素的值的,而數(shù)組坐標是通過圖片所在DIV的data-fileindex屬性值獲得的, 該值會一直增加,不會替補空缺值,不會因為刪除圖片而變動,正好與selectedPics數(shù)組相對應。
var idx = $("#"+previewId).attr("data-fileindex");
例如我選擇了3張圖片,此時沒有上傳,他們依次的data-fileindex為0,1,2,當我刪除中間那個圖片并重新選擇新圖片時,那么他們的data-fileindex就會變?yōu)?,2,3。

五、代碼參考
最后本人才學AngularJS,代碼寫的不夠純熟,如有不妥之處,歡迎大家留言,示例代碼在文章末尾,數(shù)據(jù)庫腳本為files.sql(MySQL),大家多看看代碼吧。

源碼下載:http://xiazai.jb51.net/201611/yuanma/BSfileinput(jb51.net).rar

如果大家還想深入學習,可以點擊這里進行學習,再為大家附兩個精彩的專題:Bootstrap學習教程 Bootstrap實戰(zhàn)教程

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JS如何根據(jù)當前日期獲取一周所有日期

    JS如何根據(jù)當前日期獲取一周所有日期

    這篇文章主要介紹了JS如何根據(jù)當前日期獲取一周所有日期,文中通過實例代碼補充介紹了js獲取當前一周的時間,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Javascript實現(xiàn)信息滾動效果

    Javascript實現(xiàn)信息滾動效果

    這篇文章主要為大家詳細介紹了Javascript實現(xiàn)信息滾動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 如何確保JavaScript的執(zhí)行順序 之實戰(zhàn)篇

    如何確保JavaScript的執(zhí)行順序 之實戰(zhàn)篇

    我曾在文章《如何在多個頁面使用同一個HTML片段 - 續(xù)》的最后提到JavaScript順序執(zhí)行的特性。雖然現(xiàn)代瀏覽器可以并行的下載JavaScript(部分瀏覽器),但考慮到JavaScript的依賴關系,他們的執(zhí)行依然是按照引入順序進行的。
    2011-03-03
  • 關于localStorage的存儲,讀取,刪除

    關于localStorage的存儲,讀取,刪除

    這篇文章主要介紹了關于localStorage的存儲,讀取,刪除方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • JavaScript編寫連連看小游戲

    JavaScript編寫連連看小游戲

    這篇文章主要介紹了JavaScript編寫連連看小游戲的相關資料,需要的朋友可以參考下
    2015-07-07
  • ES6 javascript中class類的get與set用法實例分析

    ES6 javascript中class類的get與set用法實例分析

    這篇文章主要介紹了ES6 javascript中class類的get與set用法,結合具體實例形式分析了ES6中類的get與set關鍵字使用方法,需要的朋友可以參考下
    2017-10-10
  • js判斷PC端與移動端跳轉

    js判斷PC端與移動端跳轉

    本文主要介紹了js判斷PC端與移動端跳轉的方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • JS實現(xiàn)的簡潔縱向滑動菜單(滑動門)效果

    JS實現(xiàn)的簡潔縱向滑動菜單(滑動門)效果

    這篇文章主要介紹了JS實現(xiàn)的簡潔縱向滑動菜單(滑動門)效果,通過簡單的頁面元素遍歷實現(xiàn)華東切換的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • js 禁用瀏覽器的后退功能的簡單方法

    js 禁用瀏覽器的后退功能的簡單方法

    要禁用后退的話,在每個頁面的頂部加上腳本:
    2008-12-12
  • layui彈出層按鈕提交iframe表單的方法

    layui彈出層按鈕提交iframe表單的方法

    今天小編就為大家分享一篇layui彈出層按鈕提交iframe表單的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論