bootstrap图片上传功能
重点:
fileupload 、loadImage
引用js:
<!-- Bootstrap CSS --> <link href="~/lib/bootstrap/4.1.1/css/bootstrap.css" rel="stylesheet" type="text/css" /> <!-- Bootstrap CSS --> <link href="~/lib/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <!-- Bootstrap styles <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> --> <!-- CSS to style the file input field as button and adjust the Bootstrap progress bars --> <link href="~/lib/jquery-file-upload/9.21.0/css/jquery.fileupload.css" rel="stylesheet" /> <!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> <script src="~/lib/jquery-file-upload/9.21.0/js/vendor/jquery.ui.widget.js"></script> <!-- The Load Image plugin is included for the preview images and image resizing functionality --> <script src="~/lib/javascript-load-image/2.19.0/js/load-image.all.min.js"></script> <script src="~/lib/javascript-canvas-to-blob/3.14.0/js/canvas-to-blob.js"></script> <!-- The Iframe Transport is required for browsers without support for XHR file uploads --> <script src="~/lib/jquery-file-upload/9.21.0/js/jquery.iframe-transport.js"></script> <!-- The basic File Upload plugin --> <script src="~/lib/jquery-file-upload/9.21.0/js/jquery.fileupload.js"></script> <!-- The File Upload processing plugin --> <script src="~/lib/jquery-file-upload/9.21.0/js/jquery.fileupload-process.js"></script> <!-- The File Upload image preview & resize plugin --> <script src="~/lib/jquery-file-upload/9.21.0/js/jquery.fileupload-image.js"></script> <!-- The File Upload validation plugin --> <script src="~/lib/jquery-file-upload/9.21.0/js/jquery.fileupload-validate.js"></script> <script src="~/js/EnterpriseDetail.js?v=1"></script> <script type="text/javascript" src="~/lib/jquery-validation/1.17.0/jquery.validate.js"></script> <script type="text/javascript" src="~/lib/jquery-validation-unobtrusive/3.2.9/jquery.validate.unobtrusive.js"></script> <script type="text/javascript" src="~/lib/jquery-validation/1.17.0/localization/messages_zh.js" charset="utf-8"></script>
页面html
<div class="form-group row"> <label class="col-md-2 col-form-label ">营业执照*</label> <div class="col-md-6"> <!-- The fileinput-button span is used to style the file input field as button --> <button type="button" class="fileinput-button btn btn-info waves-effect waves-light mr-4">上传附件</button> <button type="button" class="ImgRemove-button btn btn-info waves-effect waves-light mr-4" >删除附件</button> <!-- The global progress bar --> <div class="progress" > <div class="progress-bar progress-bar-success"></div> </div> <!-- The container for the uploaded files --> <div class="files "></div> <input asp-for="BusinessLicence" type="text" class="imageGroupId"> <span asp-validation-for="BusinessLicence" class="text-danger validationShow"></span> </div> </div> <form asp-controller="upload" asp-action="image" method="post" > <!-- The file input field used as target for the file upload widget --> <input type="file" name="files[]" multiple> <div class="uploadInfo"> </div> </form>
页面 js实现:
ImageUpload.Init("@Url.Content("~/upload/image")"); ImageLoad.Init(100, 100, 50, 50, true); var ImageUpload = { imageUrl:"", Init:function(urlV){ ImageUpload.imageUrl=urlV ImageUpload.AddEvent(); ImageUpload.OperateInjecte(); }, AddEvent: function () { $(".fileinput-button").click(function () { var $this = $(this); var $fileupload = $(\'#fileupload\'); var $showDiv = $this.siblings(".files:first"); var $progress = $this.siblings(".progress:first"); var $removeBt = $this.siblings(".ImgRemove-button:first"); var $groupGuidInput=$this.siblings(".imageGroupId:first"); var $fileuploadInfo = $fileupload.siblings(".uploadInfo:first"); $fileuploadInfo.append(\'<input class="uploadPart\'+ \'" attr-bt="\' + $this.attr("id") + \'" attr-removeBt="\' + $removeBt.attr("id") + \'" attr-show="\' + $showDiv.attr("id") + \'" \' + \'" attr-progress="\' + $progress.attr("id") + \'" attr-groupGuidInput="\' + $groupGuidInput.attr("id") + \'" attr-group type="hidden">\'); $fileupload.click(); }); $(".ImgRemove-button").click(function () { var $this = $(this); var $showDiv = $this.siblings(".files:first"); var $uploadBt = $this.siblings(".fileinput-button:first"); var $groupGu.imageGroupId:first"); $showDiv.html(""); $groupGuid.val(""); $this.hide(); $uploadBt.show(); }); }, SetImgFromGroupGuid:function(edit){ $(".imageGroupId").each(function () { var $this = $(this); var $fileupload = $(\'#fileupload\'); var $showDiv = $this.siblings(".files:first"); var $progress = $this.siblings(".progress:first"); var $removeBt = $this.siblings(".ImgRemove-button:first"); var $uploadBt=$this.siblings(".fileinput-button:first"); var $fileuploadInfo = $fileupload.siblings(".uploadInfo:first"); var $node= $(\'<div/>\').appendTo($showDiv); var getUrl=ImageUpload.imageUrl+"?g="+$this.val()+"&j=false"; ImageLoad.loadUrlImageToPriview(getUrl,function($img){ if(edit){ $uploadBt.hide(); $removeBt.show(); }else{ $uploadBt.hide(); $removeBt.hide(); } $node.prepend($img); var $node2=$(\'<p/>\') .append($(\'<a href="\'+getUrl+\'" target="_blank" class="pull-left py-2"/>\').text("查看附件")); $node2.appendTo($node); }); }); }, OperateInjecte:function () { $(\'#fileupload\').fileupload({ url:ImageUpload.imageUrl , dataType: \'json\', autoUpload: false, acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, maxFileSize: 999000, // Enable image resizing, except for Android and Opera, // which actually support image resizing, but fail to // send Blob objects via XHR requests: disableImageResize: /Android(?!.*Chrome)|Opera/ .test(window.navigator.userAgent), previewMaxWidth: 100, previewMaxHeight: 100, previewCrop: true, }) .on(\'fileuploadadd\', function (e, data) { var $uploadInfo = $(\'#fileupload\').siblings(".uploadInfo"); var $uploadInfoParts = $uploadInfo.children(".uploadPart:last") var showDivId = $uploadInfoParts.attr("attr-show"); var progressId = $uploadInfoParts.attr("attr-progress"); var uploadBt= $uploadInfoParts.attr("attr-bt"); var removeBt= $uploadInfoParts.attr("attr-removeBt"); var groupGuidInput= $uploadInfoParts.attr("attr-groupGuidInput"); var $showDiv = $(\'#\' + showDivId); var $progress = $(\'#\' + progressId); var $uploadBt = $(\'#\' + uploadBt); var $removeBt = $(\'#\' + removeBt); var $groupGuidInput = $(\'#\' + groupGuidInput); $progress.show(); data.context = $(\'<div/>\').appendTo($showDiv); data.uploadBt = $uploadBt; data.uploadBt.attr("disabled", "disabled") data.removeBt=$removeBt; data.groupGuidInput=$groupGuidInput; $.each(data.files, function (index, file) { var uploadErrors = []; if (file[\'size\'] > 20971520) { uploadErrors.push(\'文件不能大于20M\'); } var acceptFileTypes = /(\.|\/)?(gif|jpe?g|png|pdf|vnd\.openxmlformats|application\/msword|application\/vnd\.openxmlformats\-officedocument\.wordprocessingml\.document|application\/vnd\.ms\-excel|application\/vnd\.openxmlformats\-officedocument\.spreadsheetml\.sheet)$/i; if (!acceptFileTypes.test(file[\'type\'])) { uploadErrors.push(\'文件类型不正确,请上传图片、pdf、word、excel文件\'); } if (uploadErrors.length > 0) { node = $(\'<p/>\') .append($(\'<span class="text-danger"/>\').text(uploadErrors.join("\n"))); node.appendTo(data.context); return; } $progress.show(); data.submit() .always(function () { $progress.hide(); data.uploadBt.removeAttr("disabled"); if (!index) { node = $(\'<p/>\') node.appendTo(data.context); } }); }); }) .on(\'fileuploadprocessalways\', function (e, data) { var index = data.index, file = data.files[index], $node = $(data.context); if (file.preview) { ImageLoad.loadFileImageToPriview(file, function($img){ $node.prepend($img); }); } if (file.error) { //node.append($(\'<p/>\')) // .append($(\'<span />\').text("非图片类型,无缩略图!")); } }) .on(\'fileuploadprogressall\', function (e, data) { var $uploadInfo = $(\'#fileupload\').siblings(".uploadInfo"); var $uploadInfoParts = $uploadInfo.children(".uploadPart:last") var progressId = $uploadInfoParts.attr("attr-progress"); var $progress = $(\'#\' + progressId); var progress = parseInt(data.loaded / data.total * 100, 10); $progress.find(\' .progress-bar\').css( \'width\', progress + \'%\' ); }) .on(\'fileuploaddone\', function (e, data) { node = $(\'<p/>\'); file = data.files[0]; var $fileupload = $(\'#fileupload\'); var $fileuploadInfo = $fileupload.siblings(".uploadInfo:first"); var $fileuploadInfoTarget = $fileuploadInfo.children("input:last"); if (data.result) { var groupId = data.result[0].groupID; $fileuploadInfoTarget.attr("attr-groupId", groupId); data.groupGuidInput.val(groupId).trigger("change"); data.uploadBt.hide(); data.removeBt.show(); node .append($(\'<a href="\'+ImageUpload.imageUrl+\'?g=\'+groupId+\'&j=false" target="_blank" class="pull-left py-2"/>\').text(file.name+":上传成功")); } else { data.uploadBt.show(); data.groupGuidInput.val("").trigger("change"); node .append($(\'<span class="text-danger"/>\').text(file.name +\':上传失败\')); } node.appendTo(data.context); }) .on(\'fileuploadfail\', function (e, data) { file = data.files[0]; node = $(\'<p/>\') .append($(\'<span class="text-danger"/>\').text(file.name +\':上传失败\')); node.appendTo($(data.context)); }) .prop(\'disabled\', !$.support.fileInput) .parent().addClass($.support.fileInput ? undefined : \'disabled\'); } } var ImageLoad = { Init:function(maxWidth,maxHeight,minWidth,minHeight,canvas){ ImageLoad.maxWidth=maxWidth; ImageLoad.maxHeight=maxHeight; ImageLoad.minWidth=minWidth; ImageLoad.minHeight=minHeight; ImageLoad.canvas=canvas; }, maxWidth:100, maxHeight:100, minWidth:50, minHeight:50, canvas:true, loadUrlImageToPriview: function (url,callback) { loadImage( url, function (img) { if (typeof (callback) === "function") { callback($(img)); } }, { maxWidth: ImageLoad.maxWidth, maxHeight: ImageLoad.maxHeight, minWidth: ImageLoad.minWidth, minHeight: ImageLoad.minHeight, canvas: ImageLoad.canvas } ); }, loadFileImageToPriview: function (file,callback) { loadImage( file, function (img) { if (typeof (callback) === "function") { callback($(img)); } }, { maxWidth: ImageLoad.maxWidth, maxHeight: ImageLoad.maxHeight, minWidth: ImageLoad.minWidth, minHeight: ImageLoad.minHeight, canvas: ImageLoad.canvas } ); }, blobToFile: function (file, $node) { theBlob.lastModifiedDate = new Date(); theBlob.name = fileName; return theBlob; } }