文件上传
[TOC]
示例一:
【1】页面js:
/* 上传附件 docObj:文件对象 appid:cid apptypeid:1、blog 2、 busitype:100——代表附件 */ function uploadAttachment(docObj){ var appid = $("#appid").val(); var files =docObj.files; var formData = new FormData();//通过对象传输到后台 formData.append("appid",appid);//用于sysfile插入数据的appid for (var i = files.length - 1; i >= 0; i--) { formData.append("files[]",files[i]); } $.ajax({ data : formData, type : "POST", url : "/common/xxx/upload", cache : false, processData: false, // jQuery不要去处理发送的数据 contentType: false, // jQuery不要去设置Content-Type请求头 dataType: 'JSON', success: function(data) {//data是返回的hash,key之类的值,key是定义的文件名 //查询 $('#attachment').bootstrapTable('refresh'); attachment(appid); }, error:function(){ toastr.error("上传失败"); } }); }
【2】spring mvc后台接收多文件:
//下面新增自定义方法 @ResponseBody @PostMapping("/upload") R upload(@RequestParam("files[]") MultipartFile[] files,@RequestParam("appid") String appid) throws IOException, Exception { //多个附件上传 for (int i = 0; i < files.length; i++) { System.out.println(i); String fname = files[i].getOriginalFilename(); // String fileName = FileUtil.renameToUUID(fname);//换成uuid——也是唯一,好找图片 String uuid = UUID.randomUUID().toString().replace("-", ""); String fileType = fname.substring(fname.lastIndexOf(".") + 1, fname.length()).toLowerCase(); String fileName = uuid+"."+fileType;//cf6ec8ccb62e451e8d5f27dab6bfeb3f.png FileUtil.uploadFile(files[i].getBytes(),tuodataConfig.getUploadPublicPath()+"blog/", fileName); FileDO fileDo= insertFile(appid,uuid,0,fname,fileName,fileType); } return R.ok(); }
示例二:
layui图片上传
【1】单张
html: <body> <input type="hidden" name="rotationChartId" id="rotationChartId" value="#(rotationChart.id)" /> <input type="hidden" name="mToken" value="#(mToken)" /> <div class="layui-form-item"> <label class="layui-form-label">轮播图片</label> <div class="layui-input-block"> <input type="hidden" name="image" id="image" /> <button type="button" class="layui-btn layui-btn-normal" id="chooseFile">选择文件</button> <div class="fileinput-new thumbnail" style="max-width: 200px; max-height: 150px;"> <img #if(rotationChart.value==null) src="#(ctx)/assets/img/no.png" #else src="#(ctx)#(rotationChart.value)" #end id="demo1" /> </div> </div> </div> </body> js: 新增的js脚本: <script> layui.config({ base: '#(ctx)/assets/layuiadmin/' //静态资源所在路径 }).extend({ index: 'lib/index' //主入口模块 }).use(['index', 'form', 'laydate', 'upload'], function() { var $ = layui.$, admin = layui.admin, element = layui.element, layer = layui.layer, laydate = layui.laydate, form = layui.form, upload = layui.upload; // layui图片上传(单张) upload.render({ elem: '#chooseFile', url: '#(curl)/rotationChartSave', auto: false, bindAction: '#submit', // 触发事件 headers: { sessionId: '#(ac.sessionId)', menuId: '#(menuId)' }, choose: function(obj) { //选择文件的回调,obj为选中的文件 //将每次选择的文件追加到文件队列 var files = obj.pushFile(); //预览选中的文件(本地文件) obj.preview(function(index, file, result) { $('#demo1').attr('src', result); }); }, done: function(data) { if(data.code == 1) { window.location.reload(); } else if(data.code == 2) { location.href = '#(ctx)/system/toLogin'; } parent.layer.msg(data.desc, { offset: '80%' }); layer.closeAll('loading'); } }); }); </script> 编辑的js脚本: <script> layui.config({ base: '#(ctx)/assets/layuiadmin/' //静态资源所在路径 }).extend({ index: 'lib/index' //主入口模块 }).use(['index', 'form', 'laydate', 'upload'], function() { var $ = layui.$, admin = layui.admin, element = layui.element, layer = layui.layer, laydate = layui.laydate, form = layui.form, upload = layui.upload; // 通过formData进行传递数据 var formData = new FormData($("#form")[0]); // layui图片上传(单张) upload.render({ elem: '#chooseFile', url: '#(curl)/rotationChartUpdate', auto: false, bindAction: '#submit', data: {"rotationChartId":formData.get("rotationChartId")},// 通过属性进行获取值 headers: { sessionId: '#(ac.sessionId)', menuId: '#(menuId)' }, choose: function(obj) { //选择文件的回调,obj为选中的文件 //将每次选择的文件追加到文件队列 var files = obj.pushFile(); //预览选中的文件(本地文件) obj.preview(function(index, file, result) { $('#demo1').attr('src', result); }); }, done: function(data) { if(data.code == 1) { window.location.reload(); } else if(data.code == 2) { location.href = '#(ctx)/system/toLogin'; } parent.layer.msg(data.desc, { offset: '80%' }); layer.closeAll('loading'); } }); }); </script> 后台代码: /** * 轮播图保存 */ @Before(value = { JMSystemApiInterceptor.class }) public void rotationChartSave() { String image = JMUploadKit.fileUpload(this, "file", "rotationChart"); Configure rotationChart = new Configure(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); rotationChart.setValue2(sdf.format(new Date())); boolean result = false; if (image != null) { rotationChart.setName("rotationChart"); rotationChart.setValue(image); result = configureDao.save(rotationChart); } if (result) { // 给type跟desc赋值 Configure rotationChart1 = configureDao.get(false); rotationChart.setType(rotationChart1.getType() + 1);// 获取最后一个type rotationChart.setDesc("轮播图-" + (rotationChart1.getType() + 1)); rotationChart.update(); JMResult.success(this, "新增成功"); } else { JMResult.fail(this, "新增失败"); } } /** * 轮播图更新 */ @Before(value = { JMSystemApiInterceptor.class }) public void rotationChartUpdate() { String image = JMUploadKit.fileUpload(this, "file", "rotationChart"); Integer rotationChartId = getParaToInt("rotationChartId",null); Configure rotationChart = new Configure(); Configure rotationChart1 = configureDao.getById(rotationChartId); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); boolean result = false;// 标识是否报错 if (image != null) { if (rotationChart1.getValue() != null) ToolUpload.deleteFile(rotationChart1.getValue()); rotationChart.setId(rotationChartId); rotationChart.setValue(image); rotationChart.setValue2(sdf.format(new Date()));// 记录更新时间 result = configureDao.update(rotationChart); } if (result) { JMResult.success(this, "修改成功"); } else { JMResult.fail(this, "修改失败"); } }
【2】多张
参考文章路径:https://www.layui.com/demo/up...
示例三
【1】oss上传图片
<c:set var="oss" value="https://wenbang.oss-cn-hangzhou.aliyuncs.com" /> <div class="form-group"> <label class="control-label col-md-3">引导页</label> <div class="col-md-6"> <div class="fileinput fileinput-new" data-provides="fileinput"> <!--回显数据库图片--> <div class="fileinput-new thumbnail" style="max-width: 200px; max-height: 150px;"> <img src=" <c:if test="${ydy.value == null}">${ctx}/assets/global/img/no.png</c:if> <c:if test="${ydy.value != null}">${oss}${ydy.value}</c:if>" alt="" /> </div> <!--选择本地图片后回显--> <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;"></div> <div> <span class="btn default btn-file"> <span class="fileinput-new"> 选择图片 </span> <span class="fileinput-exists"> 改变 </span> <input type="file" name="image"> </span> <a href="javascript:;" class="btn red fileinput-exists" data-dismiss="fileinput"> 删除 </a> </div> </div> <div class="clearfix margin-top-10"> <span class="label label-danger">NOTE!</span> 兼容 IE10+, FF3.6+, Safari6.0+, Chrome6.0+ and Opera11.1+.以上的浏览器 </div> </div> </div> 后台代码: String ossFileUpload = ToolUpload.OSSFileUpload(this, "image", "configure"); 地址:wenbang/upload/configure/20190116/xxx.jpg page 页面显示缩略图: <td> <img src="<c:if test="${obj.value == null}">${ctx}/assets/global/img/no.png</c:if><c:if test="${obj.value != null}">${oss}${obj.value}</c:if>" style="max-width: 26px; max-height: 22px;"> </td>