FormData是Ajax 2.0对象用以将数据编译成键值对,以便于XMLHttpRequest来发送数据。它是XMLHttpRequest Level 2提供的一个接口对象,可以使用该对象来模拟和处理表单并方便的进行文件上传操作。
下面我们看看怎么基于FormData来实现ajax文件上传功能。
前端代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <input type="file" name="pic" id="pic"> <p id="pimg"></p> </body> </html> <script type="text/javascript"> $(function (){ $("#pic").change(function (){ //formData可以通过ajax来提交表单 var formData=new FormData(document.getElementById("myform")); //添加图片上传的控件 formData.append("pic",document.getElementById("pic")); $.ajax({ url:"${path}/manage/product?action=uploadPic", type:"post", data:formData, //上传图片必须指定 //不设置contentType头 contentType:false, //不让jquery处理发送的数据 processData:false, success:function (data){ $("#pimg").html("<img src='${path}/images/"+data+"' style='width:100px;'>"); } }); }); }); </script>
后端代码:
PrintWriter out=response.getWriter(); Part part=request.getPart("pic"); //获得文件后缀名 .jpg .png .gif 后缀名要和用户上传的相同 //获得报头信息 //例如:form-data; name="pic"; filename="1.jpg" //form-data; name="pic"; filename="" String head=part.getHeader("content-disposition"); String filename=null; //判断是否上传了图片 if(head.indexOf(".")>0){ int index=head.indexOf("."); //截取到后缀名 String fileext=head.substring(index,head.length()-1); //生成一个唯一的文件名 filename=UUID.randomUUID().toString(); filename+=fileext; //获取发布的网站的根目录 //D:\projects_idea2021\shop\target\shop-1.0-SNAPSHOT\ String path=this.getServletContext().getRealPath("/")+"images/"; //写入图片到指定的路径 part.write(path+filename); //释放内存中和图片相关的数据 part.delete(); } out.write(filename); out.close();
实现效果:
0条评论
点击登录参与评论