Bootstrap 之 bootstrap-fileinput 选择完文件后自动上传、修改预览区默认的初始文字描述、编辑回显删除文件、限制文件上传数量、移除预览图的功能按钮

照例:附上地址 https://github.com/kartik-v/bootstrap-fileinput


属性介绍

属性类型默认值描述
languageString'en' 多语言设置,使用时需提前引入locales文件夹下对应的语言文件,中文zh,引入语言文件必须放在fileinput.js之后
showCaptionBooleantrue是否显示被选文件的简介
showBrowseBooleantrue是否显示浏览按钮
showPreviewBooleantrue是否显示预览区域
showRemoveBooleantrue是否显示移除按钮
showUploadBooleantrue是否显示上传按钮
showCancelBooleantrue是否显示取消按钮
showCloseBooleantrue是否显示关闭按钮
showUploadedThumbsBooleantrue 这个属性是基于这样一个使用方法的:选择若干个文件后点击右下角上传按钮批量上传,待全部完成后再选择一批文件,此时之前上传成功的文件是否要保存。就是这个属性控制的。注意,点击文件缩略图下面的上传按钮不会导致之前的成功上传的文件消失,即使这里设置了true
browseOnZoneClickBooleanfalse
autoReplaceBooleanfalse是否自动替换当前图片,设置为true时,再次选择文件, 会将当前的文件替换掉。
generateFileIdObjectnull
previewClassString添加预览按钮的类属性
captionClassString添加标题类属性
frameClassString'krajee-default'针对每个缩略图的框架
mainClassString'file-caption-main'针对元素类属性
mainTemplateObjectnull
purifyHtmlBooleantrue
fileSizeGetterObjectnull
initialCaptionString
initialPreviewArray/Object[]通过这个参数,我们可以为文件区设置一些默认的缩略图
initialPreviewDelimiterString'$$'
initialPreviewAsDataBooleanfalse
initialPreviewFileTypeString'image'
initialPreviewConfigArray/Object[]
initialPreviewThumbTagsArray/Object[]
previewThumbTagsObject{}
initialPreviewShowDeleteBooleantrue
removeFromPreviewOnErrorBooleanfalse
deleteUrlString删除图片时的请求路径
deleteExtraDataObject{}删除图片时额外传入的参数
overwriteInitialBooleantrue
previewZoomButtonIconsObject{prev: '',next: '',toggleheader: '',fullscreen: '',borderless: '',close: ''},
previewZoomButtonClassesObject {prev: 'btn btn-navigate',next: 'btn btn-navigate',toggleheader: 'btn btn-default btn-header-toggle',fullscreen: 'btn btn-default',borderless: 'btn btn-default',close: 'btn btn-default'},
preferIconicPreviewBooleanfalse
preferIconicZoomPreviewBooleanfalse
allowedPreviewTypesundefinedundefined
allowedPreviewMimeTypesObjectnull
allowedFileTypesObjectnull接收的文件后缀,如['jpg', 'gif', 'png'],不填将不限制上传文件后缀类型
allowedFileExtensionsObjectnull指出带有哪些后缀名的文件才是被接受上传的,设置msgInvalidFileExtension可以个性化出现此错误时的错误信息
defaultPreviewContentObjectnull
customLayoutTagsObject{}
customPreviewTagsObject{}
layoutTemplatesObject{actionUpload: '',actionZoom: '',actionDownload: '',actionDelete: ''}渲染布局的每个部分的模板配置
previewFileIconString 当文件无法被预览时出现在缩略图中的图标,默认是
previewFileIconClassString'file-other-icon'
previewFileIconSettingsObject{}可以将不同的后缀的文件有不同的缩略图图标
previewFileExtSettingsObject{}
buttonLabelClassString'hidden-xs'
browseIconString
browseClassString'btn btn-primary'指出了右下角选择按钮的样式。一般尽量不要用btn-sm和btn-lg,会和左边的输入框不协调
removeIconString删除按钮相关的属性
removeClassString'btn btn-default'
cancelIconString
cancelClassString'btn btn-default'
uploadIconString上传按钮相关的属性
uploadClassString'btn btn-default'
uploadUrlStringnull上传文件路径
uploadAsyncbooleantrue是否为异步上传
uploadExtraDataObject{}上传文件时额外传递的参数设置
zoomModalHeightnumber480
minImageWidthStringnull图片的最小宽度
minImageHeightStringnull图片的最小高度
maxImageWidthStringnull图片的最大宽度
maxImageHeightStringnull图片的最大高度
resizeImageBooleanfalse
resizePreferenceString'width'
resizeQualitynumber0.92
resizeDefaultImageTypeString'image/jpeg'
minFileSizenumber0单位为kb,上传文件的最小大小值
maxFileSizenumber0单位为kb,如果为0表示不限制文件大小
resizeDefaultImageTypenumber25600(25MB)
minFileCountnumber0表示同时最小上传的文件个数
maxFileCountnumber0表示允许同时上传的最大文件个数
validateInitialCountBooleanfalse
msgValidationErrorClassString'text-danger'
msgValidationErrorIconString
msgErrorClassString'file-error-message'
progressThumbClassString"progress-bar progress-bar-success progress-bar-striped active"
rogressClassString"progress-bar progress-bar-success progress-bar-striped active"
progressCompleteClassString"progress-bar progress-bar-success"
progressErrorClassString"progress-bar progress-bar-danger"
progressUploadThresholdnumber99
previewFileTypeString'image'预览文件类型,内置['image', 'html', 'text', 'video', 'audio', 'flash', 'object',‘other‘]等格式
elCaptionContainerStringnull
elCaptionTextStringnull设置标题栏提示信息
elPreviewContainerStringnull
elPreviewImageStringnull
elPreviewStatusStringnull
elErrorContainerStringnull
errorCloseButtonString × '
slugCallbackfunctionnull选择后未上传前 回调方法
dropZoneEnabledBooleantrue是否显示拖拽区域
dropZoneTitleClassString'file-drop-zone-title'拖拽区域类属性设置
fileActionSettingsObject{}设置预览图片的显示样式
otherActionButtonsString编码设置
textEncodingString'UTF-8'
ajaxSettingsObject{}
ajaxDeleteSettingsObject{}
showAjaxErrorDetailsBooleantrue

Method 方法介绍

方法名描述
fileerror异步上传错误结果处理$('#uploadfile').on('fileerror', function(event, data, msg) {});
fileuploaded异步上传成功结果处理$("#uploadfile").on("fileuploaded", function (event, data, previewId, index) {})
filebatchuploaderror批量上传错误结果处理$('#uploadfile').on('filebatchuploaderror', function(event, data, msg) {});
filebatchuploadsuccess批量上传成功结果处理$('#uploadfile').on('filepreupload', function(event, data, previewId, index) {});
filebatchselected选择文件后处理事件$("#fileinput").on("filebatchselected", function(event, files) {});
upload文件上传方法$("#fileinput").fileinput("upload");
fileuploaded上传成功后处理方法$("#fileinput").on("fileuploaded", function(event, data, previewId, index) {});
fileresetPossible values: http, https, ws, wss.
fileclear点击浏览框右上角X 清空文件前响应事件$("#fileinput").on("fileclear",function(event, data, msg){});
filecleared点击浏览框右上角X 清空文件后响应事件 $("#fileinput").on("filecleared",function(event, data, msg){});
fileimageuploaded在预览框中图片已经完全加载完毕后回调的事件
fileremoved点击移除后的回调事件 $("#fileinput").on("fileremoved", function (event, id, index) {}
filebeforedelete编辑回显(原图片的)直接点的预览区删除按钮删除之前的回调事件(注意组装图片配置的删除url必填,可为空方法,传递的参数key绑定的值就是回调函数的参数key) $("#fileinput").on("filebeforedelete", function (event, key) {}
filepredelete编辑回显(原图片的)直接点的预览区删除按钮的回调事件(注意组装图片配置的删除url必填,可为空方法,传递的参数key绑定的值就是回调函数的参数key) $("#fileinput").on("filepredelete", function (event, key, jqXHR, data) {}
filedeleted编辑回显(原图片的)直接点的预览区删除按钮的回调事件(注意组装图片配置的删除url必填,可为空方法,传递的参数key绑定的值就是回调函数的参数key) $("#fileinput").on("filedeleted", function (event, key) {}
filesuccessremove上传完成之后的预览区(新增图片的)删除按钮回调事件 $("#fileinput").on("filesuccessremove", function (event, data, previewId) {}


使用

详细的使用方法查看代码注释

$(document).ready(function () {

    // ---------------------------------------上传相关功能开始-------------------------------------------------
    /**
     * 获取初始化文件
     * @param files 后台返回的文件url字符串,多文件逗号隔开
     * @returns {{initPreviewConfig: any[], preList: any[]}}
     */
    function getInitFiles(files) {
        // 创建两个数组用来保存图片和图片配置
        let preList = new Array(); // 图片数组
        let initPreviewConfig = new Array(); // 图片配置数组

        if(files != null) {
            let fileList = files.split(','); // 因为多张图片是以逗号分隔,所以拆开
            for(let i = 0; i < fileList.length; i++) {	// 这里遍历图片列表

                preList.push('<img src="' + fileList[i] + '">')	// 组装图片

                //组装图片配置
                let configItem = {
                    caption: (i+1) + '.png', // 展示的文件名
                    url: '/api/deleteImage', // 删除url,必填,可以写一个空方法,不然无法删除初始化图片
                    // key: fileList[i], // 删除时Ajax向后台传递的参数
                    // extra: function() {
                    //     return { id }
                    // }
                };
                initPreviewConfig.push(configItem);
            }
        }
        return { preList, initPreviewConfig }
    }


	/**
	 * 初始化上传组件
	 * @param id 上传组件绑定的input id
	 * @param maxFileCount 允许上传的文件数量
	 * @param autoReplace 是否自动替换当前图片
	 * @param previewOption 组件初始化图片:initialPreview,initialPreviewConfig;已封装方法:getInitFiles
	 * @param callBack 回调函数,参数上传成功时的data
	 */
	function initUpload(id, maxFileCount, autoReplace, previewOption, callBack) {
	    let url = maxFileCount == 1 ? "api/image/uploadImage" : "api/image/uploadImages"
	    let fileInputOption = {
	        uploadUrl: url,
	        maxFileCount: maxFileCount, // 允许上传的文件数量
	        uploadAsync: maxFileCount == 1 ? true : false, // 是否异步上传
	        autoReplace: true, // 是否自动替换当前图片
	        showCaption: false, // 是否显示标题
	        showUpload: false, // 是否显示上传按钮
	        showRemove: false, // 是否显示移除按钮
	        layoutTemplates: {
				// actionDelete: '', // 去除上传预览的缩略图中的删除图标
                actionUpload: '', // 去除上传预览缩略图中的上传图片;
                actionZoom: '', // 去除上传预览缩略图详情的图标
                actionDownload: '' // 去除上传预览缩略图中的下载图标
			}, // 渲染布局的每个部分的模板配置
	        allowedFileExtensions: ['jpg', 'png', 'jpeg'], // 允许上传的文件扩展
	        msgInvalidFileExtension: "只支持jpg、png、jpeg 格式,请重新选择!",
	        maxFileSize: 5120, // 允许上传的最大值文件大小,这里设置成 5M 大小
	        initialPreview: previewOption.preList,		// 初始化图片
	        initialPreviewConfig: previewOption.initPreviewConfig,
	        dropZoneTitle: `拖拽文件或者点击下方选择按钮...<br/><b style="color: black;">之后记得点击上传完成上传</b>`, // 预览区的初始文字描述
	        uploadExtraData: function () {   //向后台传递的附带参数
                const data = {
                    id: "10000",
                    msg: "这里可以添加参数"
                }
                return data
            }
        }
	    let eventType = maxFileCount == 1 ? 'fileuploaded' : 'filebatchuploadsuccess'
	    $("#" + id).fileinput(fileInputOption).on('filebatchselected', function (event, files) {
	        // 选择图片后执行,
	        // 用于判断选择的图片是否超出限制,超出限制就禁用选择按钮
		    // 比如只允许上传4张,我分两次上传,第一次上传两张,第二次上传3张,此时手动禁用选择按钮
	        $("#" + event.currentTarget.id).parent().prev().css('display', 'inline-block')
	        let vals = $("." + event.currentTarget.id).val()
	        let valsLen = vals ? vals.split(',').length : 0
	        let fileCount = Object.keys(files).length
	        if((valsLen + fileCount) >= maxFileCount) {
	        	// 超过限制的文件数量,选择按钮禁止点击
	            $("#" + event.currentTarget.id).attr('disabled', 'disabled') 
	        }
	        $(this).fileinput('upload') // 选择完文件后自动上传
	    }).on('filebatchuploadcomplete', function (event, files) {
	        // 只会调用一次,所有图片都上传成功调用,这是为了弥补上传成功后部分DOM结构重新渲染,导致filebatchselected钩子中执行的操作失效
	        let vals = $("." + event.currentTarget.id).val()
	        let valsLen = vals ? vals.split(',').length : 0
	        let fileCount = Object.keys(files).length
	        if((valsLen + fileCount) >= maxFileCount) {
	        	// 超过限制的文件数量,选择按钮禁止点击
	            $("#" + event.currentTarget.id).attr('disabled', 'disabled')
	        }
	    }).on(eventType, function (event, data, previewId, index) {
	    	// 上传成功后的事件
	        if (typeof callBack == "function") {
	            callBack(data);
	        }
	    }).on("fileremoved", function (event, id, index) { // 点击移除后的回调,注意的是这个是选择完文件还没有上传才会调用的回调
	        $("input[name='" + event.currentTarget.id + "']").val("")
	        // 移除后恢复选择按钮的点击事件
	        $("#" + event.currentTarget.id).removeAttr('disabled')
	    }).on("filecleared", function (event, data, msg) { // 点击右上角×后的回调
	        $("." + event.currentTarget.id).val("")
	        // 移除后恢复选择按钮的点击事件
	        $("#" + event.currentTarget.id).removeAttr('disabled')
	    }).on('filebeforedelete', function(event, key) { // 上传完成之后的预览区删除按钮的回调事件
            alert("删除成功11")
        }).on("filesuccessremove", function (event, data, previewId, index) { // 编辑回显直接点的预览区删除按钮的回调事件
            alert("删除成功22")
        })
	}

	// files 后台返回的文件url字符串,多文件逗号隔开
    initUpload('inputFile', 1, true, getInitFiles(files), (data) => {
        let fileUrl = data.response.returndata
        let fileVal = $('.inputFile').val()
        let newVal = fileVal ? fileVal + ',' + fileUrl : fileUrl
        $('.iconFile').val(newVal)
    })
    
    // ---------------------------------------上传相关功能结束-------------------------------------------------
}


如有不足,望大家多多指点! 谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuangv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值