mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

当前位置: mg4377娱乐娱城官网 > www.mg4377.com > 正文

Bootstrap的多文本上传与治本,Bootstrap达成多文本

时间:2019-06-29 07:38来源:www.mg4377.com
新近三个品类中供给完结多文本上传与治本,而项目是根据bootstrap开垦的,所以查了有的bootstrap文件上传插件,最终开掘依旧bootstrap-fileinput最美貌,该插件可以达成多文件的上传与治本

新近三个品类中供给完结多文本上传与治本,而项目是根据bootstrap开垦的,所以查了有的bootstrap文件上传插件,最终开掘依旧bootstrap-fileinput最美貌,该插件可以达成多文件的上传与治本(插件官方地址:),具体的效用如下:

一、前言

新近三个品种中要求贯彻多文本上传与管理,而项目是基于bootstrap开拓的,所以查了有个别bootstrap文件上传插件,最终发掘照旧bootstrap-fileinput最精彩,该插件能够完成多文本的上传与治本(插件官方地址:

 图片 1图片 2

(bootstrap-fileinput不囿于于图片上传,也足以完毕文件上传,但图片的缩略图轻易辨认,这里就以图片上传为例)

 该插件基本的操作能够参照:

 

在讲该插件怎么着运用前,先跟大家讲一下品类中有关图片管理的急需:

1、  可以上传八个图片

2、  唯有当点击保存按钮时,图片音信才保存至数据库

3、  能够加载已经保存到数据库的图样音讯,并提供删除成效

 

因此,大家可以规定多少个文件状态:

已摘取:已经放入到插件中,但还尚未上传到服务器。如上海教室中第1个图片,该图片下方有上传开关。

已上传:已经上传到服务器,但图片新闻尚未保存到数据库。如上海体育场所中第3个图片,该图片下方有百分百的进程条。

已封存:图片音讯已经保存至数据库的图形,如上海体育场合中第1张图,那些图片下方有删除开关,点击删除时会将图片消息从数据库中删除。

 

*1.bootstrap-fileinput 插件git下载地址

AngularJS Bootstrap


AngularJS 的首要推荐样式表是 Instagram Bootstrap, 推文(Tweet) Bootstrap 是当前最受接待的前端框架。

 


 图片 3

二、引进要求文件

<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就非常的少介绍了

Bootstrap

您能够在您的 AngularJS 应用中进入 推文(Tweet)Bootstrap,你能够在您的 <head>成分中增添如下代码:

Bootstrap的多文本上传与治本,Bootstrap达成多文本上传与管理。 

  1. <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">

 

 

要是站点在国内,提出选择百度静态能源库的Bootstrap,代码如下:

 

  1. <link rel="stylesheet" href="//apps.bdimg.com/libs/bootstrap/3.2.0/css/bootstrap.min.css">

 

 

以下是贰个完完全全的 HTML 实例, 使用了 AngularJS 指令和 Bootstrap 类。

 


(bootstrap-fileinput不囿于于图片上传,也足以兑现公文上传,但图片的缩略图轻巧辨别,这里就以图纸上传为例)

三、多文本上传

   首先在页面中定义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中。

2.消除使用bootstrap-fileinput获得重返值

HTML 代码

  1. <!DOCTYPE html>
  2. <html>
  3. <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.2.0/css/bootstrap.min.css">
  4. <script src="http://www.chansem.com/uploads/allimg/190629/0IQ3C12-2.jpg"></script>
  5. <body ng-app="myApp" ng-controller="userCtrl">
  6. ``
  7. <div class="container">
  8. ``
  9. <h3>Users</h3>
  10. ``
  11. <table class="table table-striped">
  12. <thead><tr>
  13. <th>Edit</th>
  14. <th>FirstName</th>
  15. <th>LastName</th>
  16. </tr></thead>
  17. <tbody><tr ng-repeat="user in users">
  18. <td>
  19. <button class="btn" ng-click="editUser(user.id)">
  20. &nbsp;&nbsp;Edit
  21. </button>
  22. </td>
  23. <td>{{ user.fName }}</td>
  24. <td>{{ user.lName }}</td>
  25. </tr></tbody>
  26. </table>
  27. ``
  28. <hr>
  29. <button class="btn btn-success" ng-click="editUser('new')">
  30. CreateNewUser
  31. </button>
  32. <hr>
  33. ``
  34. <h3 ng-show="edit">CreateNewUser:</h3>
  35. <h3 ng-hide="edit">EditUser:</h3>
  36. ``
  37. <form class="form-horizontal">
  38. <div class="form-group">
  39. <label class="col-sm-2 control-label">FirstName:</label>
  40. <div class="col-sm-10">
  41. <input type="text" ng-model="fName" ng-disabled="!edit" placeholder="First Name">
  42. </div>
  43. </div>
  44. <div class="form-group">
  45. <label class="col-sm-2 control-label">LastName:</label>
  46. <div class="col-sm-10">
  47. <input type="text" ng-model="lName" ng-disabled="!edit" placeholder="Last Name">
  48. </div>
  49. </div>
  50. <div class="form-group">
  51. <label class="col-sm-2 control-label">Password:</label>
  52. <div class="col-sm-10">
  53. <input type="password" ng-model="passw1" placeholder="Password">
  54. </div>
  55. </div>
  56. <div class="form-group">
  57. <label class="col-sm-2 control-label">Repeat:</label>
  58. <div class="col-sm-10">
  59. <input type="password" ng-model="passw2" placeholder="Repeat Password">
  60. </div>
  61. </div>
  62. </form>
  63. ``
  64. <hr>
  65. <button class="btn btn-success" ng-disabled="error || incomplete">
  66. SaveChanges
  67. </button>
  68. </div>
  69. ``
  70. <script src ="myUsers.js"></script>
  71. </body>
  72. </html>

 

 该插件基本的操作能够参照:JS文件上传神器bootstrap fileinput详解,本文主要针对多文本管理。 

四、已有文件的加载与删除

   已有文件的加载是指将服务器三月经存在的文件呈现在该控件中,以贯彻公文管理,提供删除功用,那首要借助于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
                    });
                 }
            );

  点击删除Logo,会暗中同意把config中待key值传至后台,后桃园定义deletePicById方法就可以:

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

上传图片

 


在讲该插件怎么样运用前,先跟大家讲一下品种中关于图片管理的须求:

五、几点难点的解答

$("#file-0a").fileinput({
uploadUrl : "/upload_img",//上传图片的url
allowedFileExtensions : [ 'jpg', 'png', 'gif' ],
overwriteInitial : false,
maxFileSize : 1000,//上传文件最大的尺寸
maxFilesNum : 1,//上传最大的文件数量
initialCaption: "请上传商家logo",//文本框初始话value
//allowedFileTypes: ['image', 'video', 'flash'],
slugCallback : function(filename) {
return filename.replace('(', '_').replace(']', '_');
}
});

一声令下剖析

AngularJS 指令 描述
<html ng-app 为 <html> 元素定义一个应用(未命名)
<body ng-controller 为 <body> 元素定义一个控制器
<tr ng-repeat 循环 users 对象数组,每个 user 对象放在 <tr> 元素中。
<button ng-click 当点击 <button> 元素时调用函数 editUser()
<h3 ng-show 如果 edit = true 显示 <h3> 元素
<h3 ng-hide 如果 edit = true 隐藏 <h3> 元素
<input ng-model 为应用程序绑定 <input> 元素
<button ng-disabled 如果发生错误或者 ncomplete = true 禁用 <button> 元素

1、能够上传七个图片

1、为何model里不曾品质,却足以在前面几位作品体现相关属性?

    这里根本金和利息用了JFinal的ActiveRecord功用,无需定义属性和setter,getter方法,属性值被映射在model里的attrs里,那些天性是<key, value>的键值对,而key值便是数据库的字段名。特别提醒:即便SQL语句不分区大小写,但字段名依旧存在大小写的,如若字段名是大写的,那么映射到model里的key正是大写的,相同的时间JFinal的暗中认可id为主键的计谋也无法奏效,须求在configPlugin中装置,如下:arp.addMapping("pictures", "ID", Picture.class),提出我们依照Java命名标准命名数据库字段。

图片 4

在意上传图片事件完今后,获得重回值写法

 


2、唯有当点击保存开关时,图片音信才保存至数据库

2、(参谋代码)中初叶化FileInput为何要施行clear,destory操作?

    因为FileInput插件在选拔文件后,不管有没有上传,都会保留文件在file域中,由此再点击时会显示上一遍选用的文本,不合乎多相册管理的急需,原来认为clear操作就可以清空file域(官方文书档案这么说的),但实际操作开掘并从未清空,由此才调用clear,destory后再重新开端化文件上传控件。(那点不太显明,希望有大神能够辅导)

$('#file-0a').on('fileuploaded', function(event, data, previewId, index) {
var form = data.form, files = data.files, extra = data.extra,
response = data.response, reader = data.reader;
console.log(response);//打印出返回的json
console.log(response.paths);//打印出路径
});

Bootstrap 类解析

元素 Bootstrap 类 定义
<div> container 内容容器
<table> table 表格
<table> table-striped 带条纹背景的表格
<button> btn 按钮
<button> btn-success 成功按钮
<span> glyphicon 字形图标
<span> glyphicon-pencil 铅笔图标
<span> glyphicon-user 用户图标
<span> glyphicon-save 保存图标
<form> form-horizontal 水平表格
<div> form-group 表单组
<label> control-label 控制器标签
<label> col-sm-2 跨越 2 列
<div> col-sm-10 跨越 10 列

3、能够加载已经保存到数据库的图片音讯,并提供删除功用 

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。

jsp页面

 


之所以,我们能够规定几个文本状态:

六、代码仿照效法

作品写得不得了,太轻便了,作者给大家整理了下源码,单独打个包,直接用eclipse导入就可以实现,数据库脚本为files.sql(MySQL),大家多看看代码吧。

最终自个儿才学AngularJS,代码写的非常不够熟稔,如有不妥之处,接待大家留言。

参照代码下载地址:

 

<input id="file-0a" class="file" type="file" multiple
data-min-file-count="1" name="upload_logo">

JavaScript 代码

已选择:曾经放入到插件中,但还未曾上传到服务器。如上图中第1个图片,该图形下方有上传按键。

内部data-min-file-count=”1”是指文件上传最低数量

myUsers.js

 

  1. angular.module('myApp',[]).controller('userCtrl',function($scope){
  2. $scope.fName ='';
  3. $scope.lName ='';
  4. $scope.passw1 ='';
  5. $scope.passw2 ='';
  6. $scope.users =[
  7. {id:1, fName:'Hege', lName:"Pege"},
  8. {id:2, fName:'Kim', lName:"Pim"},
  9. {id:3, fName:'Sal', lName:"Smith"},
  10. {id:4, fName:'Jack', lName:"Jones"},
  11. {id:5, fName:'John', lName:"Doe"},
  12. {id:6, fName:'Peter',lName:"Pan"}
  13. ];
  14. $scope.edit =true;
  15. $scope.error =false;
  16. $scope.incomplete =false;
  17. ``
  18. $scope.editUser =function(id){
  19. if(id =='new'){
  20. $scope.edit =true;
  21. $scope.incomplete =true;
  22. $scope.fName ='';
  23. $scope.lName ='';
  24. }else{
  25. $scope.edit =false;
  26. $scope.fName = $scope.users[id-1].fName;
  27. $scope.lName = $scope.users[id-1].lName;
  28. }
  29. };
  30. ``
  31. $scope.$watch('passw1',function(){$scope.test();});
  32. $scope.$watch('passw2',function(){$scope.test();});
  33. $scope.$watch('fName',function(){$scope.test();});
  34. $scope.$watch('lName',function(){$scope.test();});
  35. ``
  36. $scope.test =function(){
  37. if($scope.passw1 !== $scope.passw2){
  38. $scope.error =true;
  39. }else{
  40. $scope.error =false;
  41. }
  42. $scope.incomplete =false;
  43. if($scope.edit &&(!$scope.fName.length ||
  44. !$scope.lName.length ||
  45. !$scope.passw1.length ||!$scope.passw2.length)){
  46. $scope.incomplete =true;
  47. }
  48. };
  49. ``
  50. });

 


已上传:业已上流传服务器,但图片新闻并未有保存到数据库。如上海教室中第四个图片,该图片下方有百分百的进度条。

3.服务端代码

JavaScript 代码深入分析

Scope 属性 用途
$scope.fName 模型变量 (用户名)
$scope.lName 模型变量 (用户姓)
$scope.passw1 模型变量 (用户密码 1)
$scope.passw2 模型变量 (用户密码 2)
$scope.users 模型变量 (用户的数组)
$scope.edit 当用户点击创建用户时设置为true。
$scope.error 如果 passw1 不等于 passw2 设置为 true
$scope.incomplete 如果每个字段都为空(length = 0)设置为 true
$scope.editUser 设置模型变量
$scope.watch 监控模型变量
$scope.test 验证模型变量的错误和完整性

编辑:www.mg4377.com 本文来源:Bootstrap的多文本上传与治本,Bootstrap达成多文本

关键词: Web开发 angular