这部分代码是当选择文件时(此时还没进行文件校验),隐藏错误信息,清空错误内容,这么做是为了应对如果上一次文件校验时有错误,而重新选择文件时,肯定要清空上一次的错误信息,再显示本次的错误信息。
portrait.on('fileuploaded', function (event, data) { if (!data.response.status) { alert.html(data.response.message).removeClass('hidden'); } })
这部分是当文件上传后,后端如果返回了错误信息,则需要进行相关的提示信息处理。
this.getExtraData = function () { return { sw: $('.jcrop-holder').css('width'), sh: $('.jcrop-holder').css('height'), x: $('#x').val(), y: $('#y').val(), w: $('#w').val(), h: $('#h').val() } }
这部分代码是获取上传文件时,附带需要发往后端的参数,这里面可以看到,x、y自然是Jcrop截取时,选框的左上角原点坐标,w、h自然就是截取的宽高,但是刚才我说了,这个是经过缩放后的宽高,不是依据图片实际像素的宽高。而sw、sh代表的是scaleWidth、scaleHeight,就是缩放宽高的意思。这个.jcrop-holder的对象是当Jcrop插件启用后,加载的图片外层容器的对象,只需要获取这个对象的宽高,就是图片被压缩的宽高,但是因为我限制了图片的宽度和高度,宽度的比例是定死的(不是宽高定死,只是比例定死,bootstrap本身就是响应式框架,所以不能单纯的说宽高定死,宽高会随着使用终端的变化而变化),高度是根据宽度保持16:4,可是我又加了pre-scrollable这个类让图片过高时以滚动条的方式不破坏外层容器的高度,所以我们实际能拿来计算缩放比例的,是宽度,而不是高度,但是这里我一起传,万一以后有其他的使用场景,要以高度为准也说不定。
好了,然后我需要贴上bootstrap-fileinput插件的配置代码:
this.portrait = function (target, uploadUrl, data) { target.fileinput({ language: 'zh', //设置语言 maxFileSize: 2048,//文件最大容量 uploadExtraData: data,//上传时除了文件以外的其他额外数据 showPreview: false,//隐藏预览 uploadAsync: true,//ajax同步 dropZoneEnabled: false,//是否显示拖拽区域 uploadUrl: uploadUrl, //上传的地址 allowedFileExtensions: ['jpg'],//接收的文件后缀 showUpload: true, //是否显示上传按钮 showCaption: true,//是否显示标题 browseClass: "btn btn-primary", //按钮样式 previewFileIcon: "<i></i>", ajaxSettings: {//这个是因为我使用了SpringSecurity框架,有csrf跨域提交防御,所需需要设置这个值 beforeSend: function (xhr) { xhr.setRequestHeader(header, token); } } }); }