Ajax实现单图片上传,多图片上传,以及和对象的综合上传

前言:本篇文章主要讲述Ajax和FormData对象配合实现单图片上传,多图片上传,以及和对象的综合上传的功能;上篇博客写了form表单实现上传预览,单图片上传,多图片上传,以及和对象的综合上传的前后端代码。本篇前端不再过多赘述,不涉及预览,只写了简单html代码,后端代码一致,只贴JS。

如有疑惑,请参考上一篇:https://blog.csdn.net/qq_38310446/article/details/87458267

1. Ajax图片上传前端代码

  • 1.1 Ajax上传单图片Html代码:

<h1>
    ajax上传单个图片
</h1>
<form id="fileForm" name="fileForm" action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="button" value="提交">
</form>
  • 1.2 Ajax上传单图片JS代码:

/**
     * ajax上传单个图片
     */
    $("#fileForm input[type='button']").click(function () {
        /**
         * 特别注意:fileForm指的是form表单属性name的值
         * file是指input控件的name
         * */
        var file = document.fileForm.file.files[0];
        //ormData是Html5新加进来的一个类,可以模拟表单数据
        var fm = new FormData();
        fm.append('file', file);
        //进行Ajax请求
        $.ajax({
            //几个参数需要注意一下
            type: "POST",//方法类型
            dataType: "json",//预期服务器返回的数据类型,可以不设置
            url: "/admin/company/addCompany",//url
            data: fm,
            async: false,
            cache: false,
            contentType: false, //禁止设置请求类型
            processData: false, //禁止jquery对DAta数据的处理,默认会处理
            success: function (p) {
                alert("上传成功")
            }
            // error: function () {
            //     alert("异常!");
            // }
        });
    });
  • 1.3 Ajax上传多图片Html代码:


<h1>ajax上传多个图片</h1>
<form id="filesForm" name="filesForm" action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="files" multiple="multiple"/>
    <input type="button" value="提交">
</form>
  • 1.4 Ajax上传多张图片Js代码:

/**
     * ajax上传多个图片
     */

    $("#filesForm input[type='button']").click(function () {
        var form=new FormData();
        /**
         * 特别注意:fileForm,file是指form表单属性name的值
         * files是指一个数组
         * */
        var files = document.filesForm.files.files;
        for (var i=0;i<files.length;i++){
            form.append("files",files[i])
        }
        // //进行Ajax请求
        $.ajax({
            //几个参数需要注意一下
            type: "POST",//方法类型
            dataType: "json",//预期服务器返回的数据类型,可以不设置
            url: "/admin/company/addManyCompany",//url
            data: form,
            async: false,
            cache: false,
            contentType: false, //禁止设置请求类型
            processData: false, //禁止jquery对DAta数据的处理,默认会处理
            success: function () {
                alert("上传成功")
            }
            // error: function () {
            //     alert("异常!");
            // }
        });
    });
  • 1.5 Ajax单个图片,多个图片,对象,综合上传HTML代码:

<h1>添加对象以及单个图片和多个图片</h1>
<form id="fileAndFilesAndObject" name="fileAndFilesAndObject" action="#" method="post" enctype="multipart/form-data">
    企业名称:<input type="text" name="name"><br>
   手机号: <input type="text" name="mobile"><br>
   邮箱: <input type="email" name="email"><br>
    企业logo<input type="file" name="file">
    企业图片<input type="file" name="files" multiple="multiple">
    <input type="button" value="提交">
</form>
  • 1.6 Ajax综合上传Js代码:

  /**
     * 上传单个图片,多个图片,以及对象
     */
    $("#fileAndFilesAndObject input[type='button']").click(function () {
        var form=new FormData();
        /**
         * 特别注意:fileAndFilesAndObject,file是指form和input中name的值
         * files是指一个数组
         * */
        var file = document.fileAndFilesAndObject.file.files[0];
        form.append("file",file);
        var files=document.fileAndFilesAndObject.files.files;
        for (var i=0;i<files.length;i++){
            form.append("companyFiles",files[i])
        }
        var name=$("#fileAndFilesAndObject input[type='name']").val();
        var mobile=$("#fileAndFilesAndObject input[type='mobile']").val();
        var email=$("#fileAndFilesAndObject input[type='email']").val();
        form.append("name",name);
        form.append("mobile",mobile);
        form.append("email",email);
        // //进行Ajax请求
        $.ajax({
            //几个参数需要注意一下
            type: "POST",//方法类型
            dataType: "json",//预期服务器返回的数据类型,可以不设置
            url: "/admin/company/addCompanyOneAndMore",//url
            data: form,
            async: false,
            cache: false,
            contentType: false, //禁止设置请求类型
            processData: false, //禁止jquery对DAta数据的处理,默认会处理
            success: function () {
                alert("上传成功")
            }
            // error: function () {
            //     alert("异常!");
            // }
        });
    });

有的小伙伴不知道后台上传的方法,,,在这里追贴一下当时的方法吧。

2.上传后端代码


    /**
     * 上传多图片和添加企业信息
     *
     * @param request
     * @param file
     * @param companyFiles
     * @param productFiles
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "/addCompanyOneAndMore")
    public String addCompanyOneAndMore(
            HttpServletRequest request,
            @ModelAttribute CompanyEntity companyEntity,
            @RequestParam("file") MultipartFile file,
            @RequestParam("companyFiles") MultipartFile[] companyFiles,
            @RequestParam("productFiles") MultipartFile[] productFiles,Model model) throws IOException {
        boolean b = Utils.uploadOneFile(request, file);
        if (b) {
            String urls = (String) request.getSession().getAttribute("imageUploadUrl");
            System.out.println("单个图片上传路径" + urls);
            companyEntity.setLogo(urls);
        }
        boolean b1 = Utils.uploadManyFiles(request, companyFiles);
        if (b1) {
            String urls = (String) request.getSession().getAttribute("imageUploadUrl");
            System.out.println("企业图片路径" + urls);
            companyEntity.setCompanyImage(urls);
        }
        boolean b2 = Utils.uploadManyFiles(request, productFiles);
        if (b2) {
            String urls = (String) request.getSession().getAttribute("imageUploadUrl");
            System.out.println("企业产品路径" + urls);
            companyEntity.setProductImage(urls);
        }
        if (b == true && b1 == true && b2 == true) {
            companyService.addCompany(companyEntity);
            model.addAttribute("msg","企业信息添加成功!");
            model.addAttribute("address","/admin/company/getCompanyByPage");
            return "/msg/msg";
        }
        model.addAttribute("msg","系统繁忙,企业信息添加失败,请稍后再试!");
        model.addAttribute("address","/admin/company/getCompanyByPage");
        return "/msg/msg";
    }
  • 2.1 上传的工具类

    /**
     * 上传单个文件方法
     * @param request
     * @param file
     * @return
     * @throws IOException
     */
    public static boolean uploadOneFile(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {
        if (!file.isEmpty()) { //如果文件不为空,写入上传路径
            String path = request.getSession().getServletContext().getRealPath("/images/upload"); //上传文件路径
            //文件原始名字
            String filename = file.getOriginalFilename();
            String suffixLast = filename.substring(filename.lastIndexOf("."));  //获取文件后缀
            String newFileName = Utils.getUUID()+suffixLast;     //文件新名字
            File filepath = new File(path, newFileName);
            判断路径是否存在,如果不存在就创建一个
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            //将上传文件保存到一个目标文件当中
            file.transferTo(new File(path + File.separator + newFileName));
            String imageUrl="/images/upload/"+newFileName;
            request.getSession().setAttribute("imageUploadUrl",imageUrl);
            return true;
        }
        return false;
    }
    /**
     * 上传多个文件方法
     * @param request
     * @param files
     * @return
     */
    public static boolean uploadManyFiles(
            HttpServletRequest request,
            @RequestParam("files") MultipartFile[] files){
        String path = request.getSession().getServletContext().getRealPath("/images/upload");
        try {
//            System.out.println("上传数组图片的长度是"+files.length);
            if (files.length!=0){
                String s="";
                for (int i = 0; i < files.length; i++) {
                    /**
                     * 必须进行判断,否则数组会越界
                     */
                    if (files[i].isEmpty()){
                        return false;
                    }
                    //文件原始名字
                    String filename = files[i].getOriginalFilename();
                    //获取文件后缀
                    String suffixLast = filename.substring(filename.lastIndexOf("."));

                    //文件新名字
                    String newFileName = Utils.getUUID()+suffixLast;
                    File filepath = new File(path, newFileName);
                    if (!filepath.getParentFile().exists()) {
                        filepath.getParentFile().mkdirs();
                    }
                    files[i].transferTo(new File(path + File.separator + newFileName));
                    s+="/images/upload/"+newFileName+"-";
                }
                System.out.println("这是我的图片拼接成的数组字符"+s);
                request.getSession().setAttribute("imageUploadUrl",s);
                return true;
            }
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

特别说明:这是当时的代码,符合当时的业务,上传企业和商品信息。 上传的配置以及pom就不贴啦。有不懂得在下方留言,相互交流。

再贴一个上传,,项目本地和target都有,目的是实时获取数据

   public static boolean uploadOneFileLayui(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {
        if (!file.isEmpty()) { //如果文件不为空,写入上传路径
            String realPath = request.getSession().getServletContext().getRealPath("/");
            String path = realPath.split("target")[0];
            path=path+"/src/main/webapp/images/upload";//为了不因为target删除后消失,同事上传到本地
            String path_target = request.getSession().getServletContext().getRealPath("/images/upload"); //上传文件路径
            //文件原始名字
            String filename = file.getOriginalFilename();
            String suffixLast = filename.substring(filename.lastIndexOf("."));  //获取文件后缀
            String newFileName = Utils.getUUID()+suffixLast;     //文件新名字
            File filepath = new File(path, newFileName);
            File target_file = new File(path, newFileName);
            判断路径是否存在,如果不存在就创建一个
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            //判断target路径
            if (!target_file.getParentFile().exists()) {
                target_file.getParentFile().mkdirs();
            }
            //将上传文件保存到一个目标文件当中
            file.transferTo(new File(path + File.separator + newFileName));
            file.transferTo(new File(path_target + File.separator + newFileName));
            request.getSession().setAttribute("imageUploadUrl",request.getContextPath()+"/images/upload/"+newFileName);
            return true;
        }
        return false;
    }

如有不解,请加java爱好群大家交流:852665736;群里都是热心好客的小伙伴,大家一同进步。

无偿免费分享源码以及技术和面试文档,更多优秀精致的源码技术栈分享请关注公众号:gh_817962068649

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值