Balalala 2015-04-13
1,在页面
<script type="text/javascript" src="js/jquery/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="js/jquery/ajaxfileupload.js"></script> <script type="text/javascript"> function uploadimg(obj,id){ $.ajaxFileUpload({ url:'uploadImg.do', secureuri:false, //是否启用安全提交,默认为false fileElementId:'file'+id, //文件选择框的id属性 dataType:'text', //服务器返回的格式,可以是json或xml等 success:function(data,status){ //服务器响应成功时的处理函数 data = data.replace("<PRE>", ''); //ajaxFileUpload会对服务器响应回来的text内容加上<pre>text</pre>前后缀 data = data.replace("</PRE>", ''); data = data.replace("<pre>", ''); data = data.replace("</pre>", ''); if(data.substring(0, 1) == 1){ $("#img"+id).attr("src",data.substring(2)); } }, error:function(data, status, e){ console.log("上传失败!"); } }); //file控件只能激发一次,要重新加载 var nf = obj.cloneNode(true); nf.value=''; obj.parentNode.replaceChild(nf, obj); } </script> <input type="file" id="file1" class="file" name="myfile" onchange="uploadimg(this,1)"/>
2,后台Controller
@RequestMapping(value="/uploadImg",produces="text/plain;charset=UTF-8") @ResponseBody public String uploadImg(MultipartFile myfile, HttpServletRequest request) throws IOException{ System.out.println("文件开始上传开始"); String realPath = request.getSession().getServletContext().getRealPath("/upload"); String originalFilename = null; if(myfile.isEmpty()){ System.out.println("上传失败!"); return "0^上传失败,上传文件为空"; }else{ if("image/jpeg".equals(myfile.getContentType())){ originalFilename = myfile.getOriginalFilename(); try { FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(realPath, originalFilename)); } catch (IOException e) { System.out.println("上传失败!"); e.printStackTrace(); return "0^上传失败,文件保存失败"; } }else{ System.out.println("上传失败!"); return "0^上传失败,文件不是指定的类型"; } } //因为在Windows下<img src="file:///D:/aa.jpg">能被firefox显示,而<img src="D:/aa.jpg">firefox是不认的 System.out.println("上传成功!"); System.out.println(originalFilename); return "1^"+request.getContextPath() + "/upload/" + originalFilename; }
附件中有我用的ajaxfileupload.js
本来我是想要json来着,但弄了好长时间没成功,就选text吧!!!
为了美观,把 type="file" 控件隐藏。点击“上传”按钮,click调用隐藏文件控件,再选择文件。查了一遍,好像是ie为了安全控制,文件的必须鼠标点击过后,才能提交。还没有想到其他的方法。。。
5,success 提交成功后自动执行的处理函数,参数data就是服务器返回的数据。6,error 提交失败自动执行的处理函数。7,data 自定义参数。fileElementId: 'file1',
-- 引入相关的js文件,相对路径 -->. -- 执行上传文件操作的函数 -->. method=uploader', //需要链接到服务器地址。fileElementId:'houseMaps',