2022-04-27 16:13

ajax上传图片

wanmatea

JavaEE

(803)

(0)

收藏

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();

实现效果:

Dingtalk_20220427161226.jpg

0条评论

点击登录参与评论