LayUI上传图片(文件)的时候,上传多张图片(文件)会调用多次接口,而我们想要让上传多个文件的时候只调用一次接口,怎么解决?

LayUI上传图片(文件)的时候,上传多张图片(文件)会调用多次接口,而我们想要让上传多个文件的时候只调用一次接口,怎么解决?

如何把调用多次接口改为调用一次接口

现在出现了一个问题,我们在前端上传图片的时候想要上传多张图片,我们想要让它只访问一次接口,给我们后端传递一个文件集合对象,但是现在出现的问题是,我们如果在LayUi前端页面上传多个图片,结果会调用多次接口,并且每个接口传递给我们后端的参数只有一个文件,不是多个文件,如下图:

在这里插入图片描述

后端代码如下图:

在这里插入图片描述

看一下我们的layui是怎么写的,如下图:

在这里插入图片描述

所以这就会出现一个问题了,因为我们上传多张图片的时候,我们调用接口是一个一个接着调用的,所以你上传几个图片,那么我们就会调用多次次url代表的接口,那怎么解决呢?

我们上传图片的时候不要自动上传,如下图:

在这里插入图片描述

我们把所有的上传图片一次性获取到,封装到formData对象里面,然后调用一次ajax方法,如下图:

在这里插入图片描述

前端使用LayUi如何上传文件

html:

<button class="layui-btn" id="upload" type="button">
                               <i class="layui-icon">&#xe67c;</i>上传图片
                           </button>

在这里插入图片描述

js:

$(function () {
        layui.use(['upload','form'], function () {
            var upload = layui.upload;
            var form = layui.form;

            var files;
            upload.render({
                    elem: '#upload'
                    ,before(res) {
                       console.log(res);
                    }
                    ,allDone: function(obj){ //当文件全部被提交后,才触发
                       console.log(obj.total); //得到总文件数
                       console.log(obj.successful); //请求成功的文件数
                       console.log(obj.aborted); //请求失败的文件数
                       console.log(obj);
                    }
                    ,multiple: true
                    ,number: 4
                    ,size: 5120 //图片上传的大小最大为5M
                    ,exts: "jpg|png|jpeg"
                    ,auto: false  //选定文件后不自动上传
                    ,choose: (obj) => {
                       files = obj.pushFile();
                    }
            })

            form.on('submit(submitForm)',function (data) {``
                console.log(files);
                var formData = new FormData();
                for(let  i in files){
                    formData.append("files",files[i]);
                }
                $.ajax({
                    type:'POST',
                    url: "/complaint/uploadImage",
                    data: formData,
                    processData: false,
                    contentType: false,
                    async: false,
                    dataType: "json",
                    success: function(result){
                        console.log(result);
                    }
                });


            });

        });
    });

在这里插入图片描述

后端如何接收前端传递来的多个文件

如下图:

在这里插入图片描述

 @RequestMapping(value = "/uploadImage",method = RequestMethod.POST)
    @ResponseBody
    public JSONArray uploadImage(@RequestParam(value = "files") List<MultipartFile> files) throws IOException {
        //该json数组用来存放微信返回给我们的上传图片所对应的id
        JSONArray jsonArray = new JSONArray();

        //商户上传反馈图片API  地址
        String uri = "https://api.mch.weixin.qq.com/v3/merchant-service/images/upload";

        //遍历前端传递过来的图片,并且访问微信官方接口,把返回的图片id封装到一个json数组里面
        if(files != null && files.size()>0){
            for(int i=0;i<files.size();i++){
                MultipartFile file = files.get(i);

                //上传到这个文件夹
                String filePath = "D:/image";
                File filePathOther = new File(filePath);
                //如果没有的话创建一个文件夹
                if (!filePathOther.exists()) {
                    filePathOther.mkdirs();
                }

                //文件全路径
                //路径+文件名
                //文件名:file.getOriginalFilename()
                String finalFilePath = filePath + "/" + file.getOriginalFilename().trim();
                //查看目录中是否已经存在该文件
                File desFile = new File(finalFilePath);
                //如果目录中不存在上传的文件,则直接在目录中下载文件
                if (!desFile.exists()) {
                    //把上传文件存储到该目录中
                    file.transferTo(desFile);
                }

                //把文件的全路径传递给微信“上传商户图片API接口”
                try {
                    String mediaId = HttpClientUtil.uploadImg(finalFilePath, uri, testMchId, testMchSerialNo, testApiV3Key, testPrivateKey);
                    jsonArray.add(mediaId);
                } catch (Exception e) {
                    log.error("WeiXinComplaintController中的uploadImage方法调用微信官方接口出错");
                    e.printStackTrace();
                }
            }
        }

        return jsonArray;
    }

前端页面图

在这里插入图片描述

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值