重点:
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 id="upload_bt1" type="button" class="fileinput-button btn btn-info waves-effect waves-light mr-4">上传附件</button> <button id="remove_bt1" type="button" class="ImgRemove-button btn btn-info waves-effect waves-light mr-4" style="display:none">删除附件</button> <!-- The global progress bar --> <div id="upload_progress1" class="progress" style="display:none"> <div class="progress-bar progress-bar-success"></div> </div> <!-- The container for the uploaded files --> <div id="upload_show1" class="files "></div> <input asp-for="BusinessLicence" type="text" style="display:none" class="imageGroupId"> <span asp-validation-for="BusinessLicence" class="text-danger validationShow"></span> </div> </div> <form asp-controller="upload" asp-action="image" method="post" id="uploadForm"> <!-- The file input field used as target for the file upload widget --> <input id="fileupload" 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-groupId="" 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 $groupGuid=$this.siblings(".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; } }