jquery+ spring+java 多文件上传

描述:支持选择多个文件,目前限制最多上传5个文件

一、前端代码

1、html页面

 <form id="fm" method="post" action="" enctype="multipart/form-data">
                    <div class="form-group">
                        <label >请选择上传文件</label>
                        <div class="col-lg-10">
                            <input id="addFile"  name="addFile" class="form-control" class="filepath" type="file"  multiple="multiple" accept="application/msword,application/vnd.ms-works,text/plain,application/pdf,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.wordprocessingml.document"><br>
                        </div>
                    </div>
                </form>

2、js代码

  add: function () {var files = document.getElementById("addFile").files;
        var number = files.length;
        if (number <=0) {
            toastr.error('请选择文件');
            return false;
        }
        if (number > 5) {
            toastr.error('上传文件个数不能超过5个');
            return false;
        }
        // 创建form对象
        var param = new FormData();
        // 循环将对应的文件放在form中
        for(var i = 0; i < files.length; i++){
            param.append("file"+i, files[i]);
        }// 上传需要将对应的文件类型上传的数据库
        param.append('fileType', fileType);
        // 文件个数,后台获取不到
        param.append('number', number);
        $.ajax({
            cache: false,
            type: "POST",
            url: backbasePath + '/apia/v1/knowledgeManager/uploadFile',
            data: param,
            async: true,
            contentType: false,
            processData: false,
            success: function (data) {
                data = eval("(" + data + ")");
                if ('000000' == data.code) {
                    toastr.success(data.msg);
                    //上传成功之后清楚掉之前选择的文件
                    $("#addFile").val("");
                    // 上传成功之后进行table的重新加载
                    $('#filesList').DataTable().ajax.reload();
                } else if ('900000' == data.code) {
                    toastr.error('上传失败!');
                } else {
                    toastr.error(data.msg);
                }
                $("#upload").modal('hide');
            },
            error: function () {
                toastr.error('上传失败!');
                $("#upload").modal('hide');
            }
        });
    }
   

二、后端  /*     * 多文件上传     * @param request 请求

     * @param token   token
     * @param fileType 文件类型
     * @param number   上传文件个数
     * @return
     */
    @RequestMapping("/uploadFile")
    public Object upload(HttpServletRequest request,  @RequestParam(required = true) String fileType,
    @RequestParam(required = true) Integer number) { String result = null; // 用来处理多文件上传的请求类 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 用来存储文件列表 List<MultipartFile> templatesList = new ArrayList<>(); // 文件请求中获取的文件是集合类型 for (int i = 0 ; i < number ; i++) { templatesList.addAll(multipartRequest.getFiles("file" + i)); } // 将集合转换成数组 MultipartFile[] files = new MultipartFile[number]; templatesList.toArray(files); log.info("files"+files.length); if (files!=null && files.length > 0) {
String path = filePath; path = path + "coalminehwaui/upload/";//定义位绝对路径 File parent = new File(new File(path).getAbsolutePath()); // 保存时间 Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); List<Map<String, Object>> dataList = new ArrayList<>(); System.out.println("\tparent=" + parent); if (!parent.exists()) { parent.mkdirs(); } for(MultipartFile file :files){ // 文件信息 Map<String, Object> m = new HashMap<String, Object>(); try { // 检查文件大小 long fileSize = file.getSize(); if (fileSize > 1 * 1024 * 1024) { //return RequestResponseTool.getJsonMessage(RespCode.repeat, "上传失败!上传的文件大小超出了1M限制!"); return null; } // 检查文件MIME类型 String contentType = file.getContentType(); List<String> types = new ArrayList<String>(); //扩展名 doc dot types.add("application/msword"); //扩展名 docx types.add("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); //扩展名 pdf types.add("application/pdf"); //扩展名 txt types.add("text/plain"); //扩展名 wps types.add("application/vnd.ms-works"); //扩展名 xla xlc xlm xls xlt xlw types.add("application/vnd.ms-excel"); if (!types.contains(contentType)) { //return RequestResponseTool.getJsonMessage(RespCode.repeat, "上传失败!不允许上传此类型的文件!"); return null; } // 获取原始文件名 String originalFilename = file.getOriginalFilename(); // 根据文件名称进行查询,如果存在则更新否则新增 Map<String, Object> fileMap = knowledgeService.getFileByName(originalFilename,fileType); // 如果能查询出对应的数据,则进行更新操作 if(fileMap !=null && fileMap.size() >0){ String id =fileMap.get("id").toString(); String oldfileName =fileMap.get("file_name").toString(); // 找到之前的文件,如果存在则删除 File oldFile = new File( path+"/"+oldfileName); if (oldFile.exists()) { oldFile.delete(); } // 保存当前的文件 file.transferTo(new File(parent, oldfileName)); // 更新文件表中的大小 m.put("id", id); m.put("file_size", fileSize); m.put("style","update"); } // 如果查不到数据,则进行新增操作 else { // 新文件名称 String filename = UUID.randomUUID().toString(); String suffix = ""; int beginIndex = originalFilename.lastIndexOf("."); if (beginIndex != -1) { suffix = originalFilename.substring(beginIndex); } // 执行保存文件 file.transferTo(new File(parent, filename + suffix)); // 存放的文件路径 String file_path = "/upload/" + filename + suffix; //知识资源库id String knowledgeId = IDCode.knowledgeId + IDTool.getWebUserId() + ""; //文件表Id String file_id = IDCode.fileId + IDTool.getWebUserId() + ""; //文件逻辑名称(和路径中的名称保持一致) String file_name = filename + suffix; m.put("id", knowledgeId); m.put("type_id", fileType); m.put("file_id", file_id);// 创建时间 m.put("create_time", dateFormat.format(date)); // 创建id m.put("creater_id", opuid); m.put("file_name", file_name); m.put("file_real_name", originalFilename); m.put("file_path", file_path); m.put("file_size", fileSize); m.put("style","add"); } } catch (Exception ex) { ex.printStackTrace(); } // 将形成的数据放在集合中 dataList.add(m); } result = knowledgeService.add(dataList); } return result; }
posted @ 2020-03-18 13:30  flyComeOn  阅读(615)  评论(0编辑  收藏  举报