前台html的代码:
<div class="layui-form-item"> <label class="layui-form-label">电影图片</label> <div class="layui-input-block"> <input type="hidden" name="imageName" value="${film.imageName}" required lay-verify="required" /> <button type="button" class="layui-btn" id="chooseImage"> <i class="layui-icon"></i>选择文件 </button> <button type="button" class="layui-btn layui-btn-warm" id="uploadBtn">开始上传</button> </div> </div>
js的代码,很简单:
upload.render({ elem: '#chooseImage' ,url: '/admin/film/uploadImage' ,accept: 'images' ,auto: false ,bindAction: '#uploadBtn' ,done: function(res){ console.log(res); console.log(res.newFileName); // $("[name=imageName]").val(res.data.src); } });
官方文档里面说,done的回调参数有三个,res(服务端响应信息)、index(当前文件的索引)、upload(重新上传的方法,一般在文件上传失败后使用)
console.log(res.newFileName);这个打印出来的就是我传到前台的值了,截图如下
后台代码如下:
@RequestMapping("/uploadImage") public Map<String,Object> uploadImage(MultipartFile file, HttpServletRequest request)throws Exception{ Map<String,Object> map = new HashMap<>(); String fileName = file.getOriginalFilename(); String suffixName = fileName.substring(fileName.lastIndexOf(".")); String newFileName = DateUtil.getCurrentDateStr()+suffixName; FileUtils.copyInputStreamToFile(file.getInputStream(),new File(imageFilePath+newFileName)); map.put("newFileName" ,newFileName); return map; }
FileUtils.copyInputStreamToFile(file.getInputStream(),new File(imageFilePath+newFileName));
这个方法是commons-io包里面的方法,把得到的文件流复制到对应的路径里面去,还设置文件的名称。