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


属性介绍

属性 类型 默认值 描述
language String 'en' 多语言设置,使用时需提前引入locales文件夹下对应的语言文件,中文zh,引入语言文件必须放在fileinput.js之后
showCaption Boolean true 是否显示被选文件的简介
showBrowse Boolean true 是否显示浏览按钮
showPreview Boolean true 是否显示预览区域
showRemove Boolean true 是否显示移除按钮
showUpload Boolean true 是否显示上传按钮
showCancel Boolean true 是否显示取消按钮
showClose Boolean true 是否显示关闭按钮
showUploadedThumbs Boolean true 这个属性是基于这样一个使用方法的:选择若干个文件后点击右下角上传按钮批量上传,待全部完成后再选择一批文件,此时之前上传成功的文件是否要保存。就是这个属性控制的。注意,点击文件缩略图下面的上传按钮不会导致之前的成功上传的文件消失,即使这里设置了true
browseOnZoneClick Boolean false
autoReplace Boolean false 是否自动替换当前图片,设置为true时,再次选择文件, 会将当前的文件替换掉。
generateFileId Object null
previewClass String 添加预览按钮的类属性
captionClass String 添加标题类属性
frameClass String 'krajee-default' 针对每个缩略图的框架
mainClass String 'file-caption-main' 针对元素类属性
mainTemplate Object null
purifyHtml Boolean true
fileSizeGetter Object null
initialCaption String
initialPreview Array/Object [] 通过这个参数,我们可以为文件区设置一些默认的缩略图
initialPreviewDelimiter String '$$'
initialPreviewAsData Boolean false
initialPreviewFileType String 'image'
initialPreviewConfig Array/Object []
initialPreviewThumbTags Array/Object []
previewThumbTags Object {}
initialPreviewShowDelete Boolean true
removeFromPreviewOnError Boolean false
deleteUrl String 删除图片时的请求路径
deleteExtraData Object {} 删除图片时额外传入的参数
overwriteInitial Boolean true
previewZoomButtonIcons Object {prev: '',next: '',toggleheader: '',fullscreen: '',borderless: '',close: ''},
previewZoomButtonClasses Object {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'},
preferIconicPreview Boolean false
preferIconicZoomPreview Boolean false
allowedPreviewTypes undefined undefined
allowedPreviewMimeTypes Object null
allowedFileTypes Object null 接收的文件后缀,如['jpg', 'gif', 'png'],不填将不限制上传文件后缀类型
allowedFileExtensions Object null 指出带有哪些后缀名的文件才是被接受上传的,设置msgInvalidFileExtension可以个性化出现此错误时的错误信息
defaultPreviewContent Object null
customLayoutTags Object {}
customPreviewTags Object {}
layoutTemplates Object {actionUpload: '',actionZoom: '',actionDownload: '',actionDelete: ''} 渲染布局的每个部分的模板配置
previewFileIcon String 当文件无法被预览时出现在缩略图中的图标,默认是
previewFileIconClass String 'file-other-icon'
previewFileIconSettings Object {} 可以将不同的后缀的文件有不同的缩略图图标
previewFileExtSettings Object {}
buttonLabelClass String 'hidden-xs'
browseIcon String
browseClass String 'btn btn-primary' 指出了右下角选择按钮的样式。一般尽量不要用btn-sm和btn-lg,会和左边的输入框不协调
removeIcon String 删除按钮相关的属性
removeClass String 'btn btn-default'
cancelIcon String
cancelClass String 'btn btn-default'
uploadIcon String 上传按钮相关的属性
uploadClass String 'btn btn-default'
uploadUrl String null 上传文件路径
uploadAsync boolean true 是否为异步上传
uploadExtraData Object {} 上传文件时额外传递的参数设置
zoomModalHeight number 480
minImageWidth String null 图片的最小宽度
minImageHeight String null 图片的最小高度
maxImageWidth String null 图片的最大宽度
maxImageHeight String null 图片的最大高度
resizeImage Boolean false
resizePreference String 'width'
resizeQuality number 0.92
resizeDefaultImageType String 'image/jpeg'
minFileSize number 0 单位为kb,上传文件的最小大小值
maxFileSize number 0 单位为kb,如果为0表示不限制文件大小
resizeDefaultImageType number 25600(25MB)
minFileCount number 0 表示同时最小上传的文件个数
maxFileCount number 0 表示允许同时上传的最大文件个数
validateInitialCount Boolean false
msgValidationErrorClass String 'text-danger'
msgValidationErrorIcon String
msgErrorClass String 'file-error-message'
progressThumbClass String "progress-bar progress-bar-success progress-bar-striped active"
rogressClass String "progress-bar progress-bar-success progress-bar-striped active"
progressCompleteClass String "progress-bar progress-bar-success"
progressErrorClass String "progress-bar progress-bar-danger"
progressUploadThreshold number 99
previewFileType String 'image' 预览文件类型,内置['image', 'html', 'text', 'video', 'audio', 'flash', 'object',‘other‘]等格式
elCaptionContainer String null
elCaptionText String null 设置标题栏提示信息
elPreviewContainer String null
elPreviewImage String null
elPreviewStatus String null
elErrorContainer String null
errorCloseButton String × '
slugCallback function null 选择后未上传前 回调方法
dropZoneEnabled Boolean true 是否显示拖拽区域
dropZoneTitleClass String 'file-drop-zone-title' 拖拽区域类属性设置
fileActionSettings Object {} 设置预览图片的显示样式
otherActionButtons String 编码设置
textEncoding String 'UTF-8'
ajaxSettings Object {}
ajaxDeleteSettings Object {}
showAjaxErrorDetails Boolean true

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) {});
filereset Possible 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)
    })
    
    // ---------------------------------------上传相关功能结束-------------------------------------------------
}


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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐