在工作中遇到了个挺有意思的需要:上传多个图片,修改信息页面的需要在原本上传的图片基础上新增其他图片,数据库存储的是图片地址拼接的字符串,记录一下

一、新增页面内容

1. HTML内容

<div class="form-group">
                <label class="col-sm-3 control-label">上传图片:</label>
                 <div class="col-sm-8"> 
                 	<input type="hidden" name="patrolImg" id="patrolImg1">
		                <div class="file-loading">
						     <input id="patrolImg" name="files" type="file" multiple>
						</div>
                </div>
            </div>

2.JS方法

// 多图上传
        $("#patrolImg").fileinput({
            uploadUrl: ctx + 'common/uploadImages',//上传方法路径
            allowedFileTypes: ['image'],//上传文件类型
            allowedFileExtensions: ['bmp', 'gif', 'jpg', 'jpeg', 'png'],//可上传文件后缀类型
            uploadAsync: false//受否为异步上传
        }).on('filebatchuploadsuccess', function (event, data, previewId, index) {
        	var rsp = data.response;
        	log.info("return urls:" + rsp.urls)
        	$("#patrolImg1").val(rsp.urls);//patrolImg1赋值图片保存地址
        })

3.collateral内容

因为是基于若依,所以直接把多个上传图片的方法写到已有的通用类 CommonController 中了
/**
     * 通用上传请求(多个图片)
     */
    @PostMapping("/uploadImages")
    @ResponseBody
    public AjaxResult uploadImages(List<MultipartFile> files) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            List<String> urls = new ArrayList<String>();
            List<String> fileNames = new ArrayList<String>();
            List<String> newFileNames = new ArrayList<String>();
            List<String> originalFilenames = new ArrayList<String>();
            for (MultipartFile file : files)
            {
                // 上传并返回新文件名称
                String fileName = FileUploadUtils.uploadImage(filePath, file);
                String url = serverConfig.getUrl() + fileName;
                urls.add(url);
                fileNames.add(fileName);
                newFileNames.add(FileUtils.getName(fileName));
                originalFilenames.add(file.getOriginalFilename());
            }
            AjaxResult ajax = AjaxResult.success();
            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
            return ajax;
        }
        catch (Exception e)
        {
            return AjaxResult.error(e.getMessage());
        }
    }

二、编辑页面内容

这部分比较有意思,需求是需要在原有的基础上进行修改或者增加,若依框架貌似没有实现该功能或者是我没有找到,就自己整了

1.HTML内容

<div class="form-group">
                <label class="col-sm-3 control-label">上传图片:</label>
                <div class="col-sm-8">
                    <input type="hidden" name="patrolImg" id="patrolImg"  th:field="*{patrolImg}">
                    <div class="file-loading">
                        <input id="uploadfile" name="files" type="file" multiple>
                    </div>
                </div>
            </div>

2.JS方法

//初始化文件预览数据和文件上传附件
        initUpload();

		//初始化方法
        function initUpload() {
            var logoUrl = $("#patrolImg").val();//拿到图片路径
            var preList = new Array();
            var initialPreviewConfig = new Array();
            //设置初始化区域值
            if (logoUrl!=null && logoUrl != ''){
                var imgArr = logoUrl.split(",");
                for ( var i = 0; i < imgArr.length; i++) {
                    preList[i] =  imgArr[i]
                    var a = {
                        caption : '主图'+(i+1),
                        width: '120px',
                        url: '/common/del',
                        key: i,
                        extra: {url: imgArr[i]}
                    }
                    initialPreviewConfig.push(a);
                }
            }
            $("#uploadfile").fileinput({
                language: 'zh', //设置语言
                uploadUrl: "/common/uploadImages", //上传的地址,改成自己的
                allowedFileExtensions:['bmp', 'gif', 'jpg', 'jpeg', 'png'],//接收的文件后缀
                initialPreviewAsData:true,
                initialPreview:preList,//预览图片
                uploadAsync: true, //默认异步上传
                showUpload: true, //是否显示上传按钮
                showRemove : false, //显示移除按钮
                showPreview : true, //是否显示预览
                showCaption: false,//是否显示标题
                browseClass: "btn btn-primary", //按钮样式
                dropZoneEnabled: false,//是否显示拖拽区域
                maxFileCount: 4, //表示允许同时上传的最大文件个数
                maxFileSize:10 *1024 *1024,
                messages: {maxFileSize:'文件上传的最大大小为 10MB',acceptFileTypes:'此文件是不支持的图片格式'    },
                enctype: 'multipart/form-data',
                validateInitialCount:true,
                msgFilesTooMany:5,
                autoReplace:false,
                initialPreviewConfig:initialPreviewConfig
            });
        }

		//导入文件上传完成之后的事件
        $("#uploadfile").on("fileuploaded", function (event, data, previewId, index) {
            var response = data.response;
            $("#fileMd5").val(response.fileMd5);
            $("#version").val(response.newVersionName);
            $("#url").val(response.filePath);
            var imgPath = $("#patrolImg").val();
            if(imgPath!=null && imgPath !=''){
                $("#patrolImg").val(imgPath+","+response.urls);
            }else{
                $("#patrolImg").val(response.urls);
            }
            $("#uploadfile").fileinput('destroy');//销毁fileUploadFileInput
            initUpload();//重新初始化文件预览数据和文件上传附件
            $('#uploadfile').fileinput('enable');//enable作用:destroy并重新初始化fileinput插件后,插件会处于disable状态
        });

		//删除方法
        $('#uploadfile').on('filepredelete', function(event, key, jqXHR, data) {  //就是在删除原图片之前触发,而新选择的图片不会触发。能满足我们的要求。
            console.log('Key = ' + key);
            var logoUrl = $("#patrolImg").val();
            var urlLinkNew = '';
            var imgArr = logoUrl.split(",");
            for ( var i = 0; i < imgArr.length; i++) {
                if (i == key) continue;
                if (urlLinkNew !=''){
                    urlLinkNew = urlLinkNew + "," + imgArr[i];
                }else{
                    urlLinkNew = imgArr[i];
                }
            }
            $("#patrolImg").val(urlLinkNew);
            console.log($("#patrolImg").val())
        });

3.collateral内容

这里定义一个del方法,用来处理已保存的图片可以被删除
@RequestMapping("/del")
    @ResponseBody
    public AjaxResult del(){
        return AjaxResult.success();
    }