亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

AngularJS+Bootstrap實現多文件上傳與管理

2019-11-19 19:01:10
字體:
來源:轉載
供稿:網友

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

 

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

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

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

1、可以上傳多個圖片

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

3、可以加載已經保存到數據庫的圖片信息,并提供刪除功能 

因此,我們可以規定幾個文件狀態:

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

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

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

一、引入必要文件

<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/*">

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

 $("#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中。

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

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

將服務器上的文件名稱和文件地址獲取之后,使用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]; //用于展示已經上傳的圖片  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值就是數據庫的字段名。 特別提醒:雖然SQL語句不分區大小寫,但字段名還是存在大小寫的,如果字段名是大寫的,那么映射到model里的key就是大寫的,同時JFinal的默認id為主鍵的策略也不能生效,需要在 configPlugin中設置,如下:arp.addMapping("pictures", "ID", Picture.class),建議大家按照Java命名規范命名數據庫字段。

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

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

3、保存時怎么知道那些圖片需要存數據庫,這是基于什么實現的?

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

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

源碼下載:http://xiazai.VeVB.COm/201611/yuanma/BSfileinput(VeVB.COm).rar

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产精品va在线观看| 欧美体内谢she精2性欧美| 亚洲日本欧美日韩高观看| 国产乱人伦真实精品视频| 欧美精品久久久久| 91精品国产一区| 久久97久久97精品免视看| 国产97在线观看| 欧美性猛交丰臀xxxxx网站| 亚洲第一男人av| 国产成人自拍视频在线观看| 精品成人在线视频| 欧美精品videosex极品1| 亚洲精品久久久久| 亚洲片国产一区一级在线观看| 日韩av在线最新| 欧美激情区在线播放| 精品电影在线观看| 久久国产精品99国产精| 欧美日韩国产色| 欧美激情一级精品国产| 色一区av在线| 欧美乱大交xxxxx| 国产精品一区二区久久国产| 一区二区三区黄色| 亚洲精品中文字| 色婷婷**av毛片一区| 国产情人节一区| 久热精品视频在线观看一区| 精品福利免费观看| 自拍偷拍亚洲一区| 国产精品中文字幕久久久| 高清欧美一区二区三区| 操91在线视频| 久久人人爽国产| 日韩美女写真福利在线观看| 66m—66摸成人免费视频| 亚洲人在线观看| 一本色道久久88综合日韩精品| 欧美日韩午夜视频在线观看| 国产视频精品在线| 欧美性极品少妇精品网站| 久久中文字幕视频| 欧美一级成年大片在线观看| 97视频免费在线看| 中文字幕亚洲欧美| 欧美黄色三级网站| 国产精品高潮呻吟视频| 精品久久久久久中文字幕| 亚洲另类图片色| 亚洲视频axxx| 欧美高清电影在线看| 91精品啪在线观看麻豆免费| 亚洲一区亚洲二区| 疯狂做受xxxx高潮欧美日本| 亚洲人成电影网站色www| 狠狠躁夜夜躁人人爽天天天天97| 亚洲香蕉成视频在线观看| 欧美中文字幕在线| 欧美在线免费看| www国产精品视频| 91久久久亚洲精品| 91av成人在线| 亚洲欧洲一区二区三区久久| 精品国产电影一区| 日本一本a高清免费不卡| 欧美电影在线观看网站| 色偷偷偷亚洲综合网另类| 欧美黑人一级爽快片淫片高清| 亚洲视屏在线播放| 欧美中文字幕视频| 亚洲自拍小视频免费观看| 久久亚洲精品视频| 欧美精品在线看| 2019国产精品自在线拍国产不卡| 亚洲xxxxx电影| 久久精品电影网站| 欧美在线视频观看| 中文日韩在线观看| 亚洲专区在线视频| 国产精品免费视频久久久| 国产69久久精品成人看| 成人av在线天堂| 成人免费高清完整版在线观看| 亚洲精品视频中文字幕| 精品久久中文字幕| 日韩亚洲国产中文字幕| 精品精品国产国产自在线| 91九色综合久久| 在线午夜精品自拍| 精品久久久久久中文字幕大豆网| 久久久久亚洲精品成人网小说| 日韩av电影手机在线观看| 亚洲自拍偷拍在线| 欧美成人黑人xx视频免费观看| 最好看的2019的中文字幕视频| 亚洲性视频网站| 日韩免费观看高清| 欧美色图在线视频| 国产午夜精品一区理论片飘花| 中文字幕亚洲二区| 国产免费一区二区三区在线能观看| 亚洲精品91美女久久久久久久| 国产69精品久久久久9| 国产噜噜噜噜噜久久久久久久久| 亚洲国产欧美在线成人app| 久久久精品一区二区三区| 91免费综合在线| 欧美床上激情在线观看| 国产成人综合亚洲| xvideos亚洲| 国产精品一区二区久久国产| 欧洲美女免费图片一区| 在线免费观看羞羞视频一区二区| 亚洲欧美综合另类中字| 激情久久av一区av二区av三区| 国产亚洲一区精品| 91免费在线视频网站| 国产日韩欧美91| 法国裸体一区二区| 国语自产在线不卡| 国产91久久婷婷一区二区| 欧洲一区二区视频| 欧美一区二粉嫩精品国产一线天| 国产精品免费久久久久影院| 欧美成aaa人片免费看| 久久乐国产精品| 国产精品伦子伦免费视频| 国产精品久久久久久久久久东京| 欧美巨乳美女视频| 亚洲理论在线a中文字幕| 另类色图亚洲色图| 日韩视频在线一区| 欧美激情在线视频二区| 久久久伊人欧美| www.日韩欧美| 国产精品视频自在线| 亚洲国产成人精品久久久国产成人一区| 国产精品视频区1| 国产在线观看一区二区三区| 亚洲91av视频| 97久久伊人激情网| 91国产美女视频| 国产日韩欧美影视| 在线精品91av| 久久精品免费电影| 91精品中国老女人| 久久精品视频亚洲| 中文字幕免费精品一区| 日韩专区在线播放| 久久久影视精品| 欧美成人精品在线视频| 日韩欧美中文第一页| 亚洲欧美在线磁力| 成人羞羞国产免费| 岛国av一区二区三区| 欧美日韩国产999| 精品性高朝久久久久久久| 国产精品第一视频| 欧美日韩性生活视频| 亚洲国产精品福利| 欧美自拍大量在线观看| 91九色国产在线| 国产精品视频久久久久|