file文本框的取值问题

2019-04-15 15:21发布

最近在做一个公司的项目,使用了layUI 这个前端框架。 在做到上传图片这个功能的时候,由于layUI提供的是AJAX异步上传图片的方式,需要自己编辑上传的接口,本人编辑controller如下: @RequestMapping("/upLoadIcon") public void upLoadIcon(@RequestParam(value="pic")MultipartFile pic,HttpServletRequest request,HttpServletResponse response,Image image) throws Exception{ if(pic.getOriginalFilename().length()>0){ //原始文件名称 String pictureFile_name = pic.getOriginalFilename(); //新文件名称 String newFileName = UUID.randomUUID().toString()+pictureFile_name.substring(pictureFile_name.lastIndexOf(".")); //记录上传日期,按日期存放 SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd"); String fmtDate=sdf.format(new Date()); //打开文件流 File file = new java.io.File("F:/develop/upload/temp/",fmtDate); //如果文件夹不存在,立即创建 if(!file.exists()){ file.mkdirs(); } File file2=new File(file,newFileName); try { pic.transferTo(file2); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String newName = fmtDate+"/"+newFileName; //文件新名字 if (newName!=null) { image.setUrl(newName); Contants.printJson(image, response); } } }至于Image这个类是我写的一个工具类 ,里面就一个属性:url 用来存 newName这个值的,方便转成json传回。下面是 Contants这个工具类的源码: public class Contants { /** * JSON * @param object * @param response * @throws Exception */ public static void printJson(Object object,HttpServletResponse response) throws Exception { Gson gson=new Gson(); String json=gson.toJson(object); response.setCharacterEncoding("UTF-8"); PrintWriter out=response.getWriter(); out.print(json); /*System.out.println(json);*/ out.flush(); out.close(); } }
就是一个普通的转json的工具类,需要导入gson-2.7.jar 经过这两步后我在前端明明拿到了返回的newName,但是却怎么也没办法赋值给 这个标签,不管是用.val() 还是 attr({"value":""})都无济于事,前端返回数据的js如下: layui.upload({ url: '<%=basePath%>sysmenu/upLoadIcon', success: function(res){ // console.log(res.url); // console.log($('#menuicon').val());//查看原本的value值 $('#menuicon').val(res.url); //console.log($('#menuicon').val());//查看现在的value值 } });
后来在网上终于查到了一个比较简单的思路:改变映射。 参考:http://www.cnblogs.com/shenyixin/archive/2013/11/19/3431883.html 根据上面链接里的描述,得出了一个未经考证的说法:因为安全问题,file框是不允许赋值的!!!
这样一来问题就可以迎刃而解了!既然file框不能赋值,那我们完全可以写一个隐藏的text框 通过设置它的name属性,把url赋值给它,然后通过这个隐藏的input和后台controller进行提交! 事实证明这个方法是绝对有效的,并且相当之简单!