java利用dropzone多文件上传

DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库, 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制.文档官网https://www.dropzonejs.com/.

java利用dropzone多文件上传案例效果图

java利用dropzone多文件上传_第1张图片java利用dropzone多文件上传_第2张图片

java利用dropzone多文件上传_第3张图片

  • html页面

使用dropzone的典型方式是通过创建一个 class 属性中包含 dropzone的form表单元素

点击框内空白区域进行上传
  • 引入dropzone.min.css样式


额外新加的css样式

  • 下载并引入dropzone.js

 

初始化dropzone控件

功能选项

url:最重要的参数,指明了文件提交到哪个页面。 
method:默认为post,如果需要,可以改为put。 
paramName:相当于元素的name属性,默认为file。 
maxFilesize:最大文件大小,单位是 MB。 
maxFiles:默认为null,可以指定为一个数值,限制最多文件数量。 
addRemoveLinks:默认false。如果设为true,则会给文件添加一个删除链接。 
acceptedFiles:指明允许上传的文件类型,格式是逗号分隔的 MIME type 或者扩展名。例如:image/*,application/pdf,.psd,.obj 
uploadMultiple:指明是否允许 Dropzone 一次提交多个文件。默认为false。如果设为true,则相当于 HTML 表单添加multiple属性。 
headers:如果设定,则会作为额外的 header 信息发送到服务器。例如:{“custom-header”: “value”} 
init:一个函数,在 Dropzone 初始化的时候调用,可以用来添加自己的事件监听器。 
forceFallback:Fallback 是一种机制,当浏览器不支持此插件时,提供一个备选方案。默认为false。如果设为true,则强制 fallback。 
fallback:一个函数,如果浏览器不支持此插件则调用。 

dictDefaultMessage:没有任何文件被添加的时候的提示文本。 
dictFallbackMessage:Fallback 情况下的提示文本。 
dictInvalidInputType:文件类型被拒绝时的提示文本。 
dictFileTooBig:文件大小过大时的提示文本。 
dictCancelUpload:取消上传链接的文本。 
dictCancelUploadConfirmation:取消上传确认信息的文本。 
dictRemoveFile:移除文件链接的文本。 
dictMaxFilesExceeded:超过最大文件数量的提示文本。 

常用事件

以下事件接收 file 为第一个参数

addedfile:添加了一个文件时发生。 
removedfile:一个文件被移除时发生。你可以监听这个事件并手动从服务器删除这个文件。 
uploadprogress:上传时按一定间隔发生这个事件。第二个参数为一个整数,表示进度,从 0 到 100。第三个参数是一个整数,表示发送到服务器的字节数。当一个上传结束时,Dropzone 保证会把进度设为 100。注意:这个函数可能被以同一个进度调用多次。 
success:文件成功上传之后发生,第二个参数为服务器响应。 
complete:当文件上传成功或失败之后发生。 
canceled:当文件在上传时被取消的时候发生。 
maxfilesreached:当文件数量达到最大时发生。 
maxfilesexceeded:当文件数量超过限制时发生。 

  • Java后台文件上传代码

 @RequestMapping("/upload_file_json")
    public Object upload_media(StandardMultipartHttpServletRequest req, HttpServletResponse rsp) {
        try {
            String dirName = Objects.toString(req.getParameter("dir"), "image");
            Subject subject = SecurityUtils.getSubject();
            Session session = subject.getSession();
            String currCompany = (String) session.getAttribute("currCompany");
            if(AppUtils.isBlank(currCompany)){
                ModelAndView errorMv = new ModelAndView("/redirect:/403");
                errorMv.addObject("message", "缺少公司慘數");
                return errorMv;
            }
            //文件保存目錄路徑
            //rootPath/dirPath/dirName/ymdPath/fileName
            String ymdPath = DateUtils.formatDate(new Date(), "yyyy_MM_dd") + "/";
            String dirPath = "/" + currCompany + "/";
            String rootPath = FileConfigUtils.getImagesSavePath();
            String os = System.getProperty("os.name");
            if (os.toLowerCase().startsWith("linux")) {
                //rootPath = SystemManager.inst().upload_path;
            }
            String filePath = dirPath + dirName + "/" + ymdPath;
            /*新文件名字的命名規則**/
            Function nameFunc = fileName -> {
                String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();//檢查後綴名
                String newFileName = IDManager.generateID();
                return newFileName + "." + fileExt;
            };

            rsp.setContentType("text/html; charset=UTF-8");

            if (!ServletFileUpload.isMultipartContent(req)) {
                return getError("請選擇文件。");
            }

            //檢查目錄
            File uploadDir = new File(rootPath);
            //檢查目錄
           /* if(!uploadDir.isDirectory()){
                System.out.println("上傳目錄不存在。");
                return getError("上傳目錄不存在.");
            }*/
            //檢查目錄寫權限
            if (!uploadDir.canWrite()) {
                System.out.println("上傳目錄沒有寫權限。");
                return getError("上傳目錄沒有寫權限。");
            }

            List url = upload_multi_file(rootPath, filePath, nameFunc, req);
            System.out.println("************富文本框上傳圖片地址************" + url);
            JSONObject ret = new JSONObject();
            ret.put("error", 0);
            ret.put("url", url);

            return ret;
        } catch (Exception e) {
            e.printStackTrace();
            return getError("未知錯誤");
        }
    }

    private String getError(String message) {
        JSONObject ret = new JSONObject();
        ret.put("error", 1);
        ret.put("url", message);
        return ret.toJSONString();
    }

    public List upload_multi_file(String saveRootPath, String filePath, Function nameFunc, StandardMultipartHttpServletRequest freq) {
        StopWatch stopWatch = new StopWatch("upfile");
        stopWatch.start("save file");

        String saveUrl = "/" + filePath;
        String realpath = saveRootPath + filePath;
        File dir = new File(realpath);
        System.out.println("exists = "+dir.exists());
        if (!dir.exists()) {
            dir.mkdirs();
        }

        //String file_url[] = new String[1];
        List urlList = new ArrayList<>();
        try {
            freq.getMultiFileMap().values().stream().forEach(files -> {
                files.stream().forEach((MultipartFile file) -> {
                    try {
                        String fileName = file.getOriginalFilename();
                        if (AppUtils.isBlank(fileName)) {
                            System.out.println("upload failed because of nofiles fileName=" + fileName);
                            return;
                        }
                        String _new_file_original_name = fileName;
                        if (null != nameFunc) {
                            _new_file_original_name = nameFunc.apply(fileName);
                        } else {
                            _new_file_original_name = fileName;
                        }
                        File newFile = new File(dir, _new_file_original_name);
                        file.transferTo(newFile);
                        //file_url[0] = saveUrl + newFile.getName();
                        urlList.add(FileConfigUtils.getImagesServerUrl()+saveUrl + newFile.getName());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
            });
        } catch (Exception e2) {
            e2.printStackTrace();
            return urlList;
        }
        stopWatch.stop();
        return urlList;
    }
}

 

 

你可能感兴趣的:(Java多文件上传)