文件上传是表单中常用的,layui的upload上传组件是非常好用的上传组件。
一 集成使用
1. 页面导入layui.js
<script th:src="@{/ajax/libs/layui/layui.js}"></script>
注意:需要把layui相关的资源放在一起,layui.js里面会自动加载同级目录下相关的CSS
二 . 页面使用
HTML
1 <!-- 图片展示--> 2 <div class="row mb mt"> 3 <div class="col-sm-8"> 4 <div class="form-group"> 5 <label for="zmzlImgs" class="col-sm-3 control-label">资料图片</label> 6 <div class="col-sm-9"> 7 <input type="hidden" class="layui-input" th:value="${houseInfo.zmzlImgs}" 8 name="zmzlImgs" id="zmzlImgs"> 9 <div class="layui-upload"> 10 <button type="button" class="btn btn-jwsb btn-success-upload" id="zmzl_Images"> 11 上传证明资料相关的图片 12 </button> 13 <div class="layui-upload-list" id="images_path_add_Images"> 14 <div th:each="srcImage:${houseInfo?.zmzlImgsList}" 15 style="position: relative; display: inline-block;margin: 15px;"> 16 <img 17 th:src="${srcImage}" 18 class="layui-upload-img" 19 style="width:120px;height:120px" 20 th:onclick="showDetail([[${srcImage}]],'zmzlImgs')" 21 > 22 <i class="fa fa-window-close fa-2x" 23 style="position: absolute;top:-10px;right:-10px;width: 25px;height: 25px " 24 th:onclick="delSelectImages([[${srcImage}]],'zmzlImgs')" 25 ></i> 26 </div> 27 </div> 28 </div> 29 </div> 30 </div> 31 </div> 32 <div class="col-sm-4"> 33 <div class="col-sm-12"> 34 <img id="img_model_pic" width="304" height="236" class="img-responsive img-thumbnail" 35 alt="样例图" src="/outer/modelpics/test.png"> 36 </div> 37 </div> 38 </div>
//js部分
#显示图片详细
let showDetail = function (url) {
console.log(url);
layer.open({
type: 2,
shade: 0.1,
area: ['60%', '60%'],
title: '图片详情',
content: url
});
};
#删除图片
let delSelectImages = function (url, targetId) {
console.log(url);
layer.confirm("你确定要删除此图片么?",
{
btn: ['是的,我确定', '我再想想'], yes: function (index) {
var $selectObj = $("#base_info #images_path_add_Images img[src='" + url + "']");
$selectObj.parent().remove();
var imgsString = $("#base_info input.layui-input").val();
$("#base_info input.layui-input").val(imgsString.replace(url + ",", ""));
layer.close(index)
}, cancel: function (index) {
layer.close(index)
}
},
)
};
#加载layui upload 组件
layui.use('upload', function () {
upload = layui.upload;
console.log($("#base_info #test_Images"));
console.log($("#base_info #test_Images").html());
//执行实例
uploadInst = upload.render({
elem: '#zmzl_Images', //绑定元素
url: '/file/upload', //上传接口
multiple: true,
before: function (inputObj) {
index = layer.load();
this.data = {
idnumber: $("#form_baseinfo input[name='studentIdNumber']").val()
};
}
, done: function (res) {
//上传完毕回调
if (res.code != 0) {
layer.closeAll();
return layer.msg('上传失败');
}
$('#base_info #images_path_add_Images').prepend('<div style="position: relative; display: inline-block;margin: 15px;"><img src="' + res.data.url + '" class="layui-upload-img" onclick="showDetail(' + "'" + res.data.url + "'" + ')" style="width:120px;height:120px" ><i class="fa fa-window-close fa-2x" style="position: absolute;top:-10px;right:-10px;width: 25px;height: 25px " onclick="delSelectImages(' + "'" + res.data.url + "'" + ')" ></i></div>');
var str = $("#base_info .layui-input").val();
$("#base_info .layui-input").val(str + res.data.url + ",");
layer.closeAll();
}
, error: function () {
//请求异常回调
layer.closeAll();
}
});
});
其中需要注意的是点:
1. 点击哪个元素会触发上传
elem: '#zmzl_Images', //绑定元素
2. 上传的时候,传递参数到后台进行额外处理。
before: function (inputObj) {
index = layer.load();
this.data = {
idnumber: $("#form_baseinfo input[name='studentIdNumber']").val()
};
}
具体是通过:this.data中的json对象来实现的
三 . 可能遇到的问题
1.layui upload组件不要多次实例化,否则会导致组件失效。
2.不要尝试在 url: '/file/upload?xxx=yyy', //上传接口 通过这种方式传递参数,对于页面上的动态参数,是取不到值的。这点在实际过程中就有遇到。