美文网首页
SpringMVC使用Dropzone.js上传图片

SpringMVC使用Dropzone.js上传图片

作者: 索伦x | 来源:发表于2019-01-28 00:31 被阅读0次

    添加依赖


    POM.xml

            <!-- 文件上传与下载 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.3</version>
            </dependency>
    

    配置MultipartResolver处理器


    spring-mvc.xml

        <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
        <bean id="multipartResolver"
              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 上传文件大小上限,单位为字节(10MB) -->
            <property name="maxUploadSize">
                <value>10485760</value>
            </property>
            <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
            <property name="defaultEncoding">
                <value>UTF-8</value>
            </property>
        </bean>
    

    编写Controller


    @Controller
    @RequestMapping(value="/upload")
    public class UploadController{
    
        @RequestMapping(value="image")
        @ResponseBody
        public UploadResp upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request, ModelMap model) {
            UploadResp uploadResp = new UploadResp();
    
            /* 获取上传文件的后缀 */
            String suffix = multipartFile.getOriginalFilename().substring (multipartFile.getOriginalFilename().lastIndexOf("."));
            /* 保存文件名称 */
            String logImageName = UUID.randomUUID().toString()+ suffix;
            /* 构建图片保存的目录 */
            SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd/HH");
            String logoPathDir = "/files"+ dateformat.format(System.currentTimeMillis());
            /* 返回相对路径给客户端 */
            uploadResp.setName(logoPathDir+"/"+logImageName);
    
            /* 得到图片保存目录的真实路径 */
            String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);
            /**根据真实路径创建目录**/
            File logoSaveFile = new File(logoRealPathDir);
            if(!logoSaveFile.exists()) logoSaveFile.mkdirs();
    
            //构建文件名称
            //String logImageName = multipartFile.getOriginalFilename();
            /**拼成完整的文件保存路径加文件**/
            String fileName = logoRealPathDir + File.separator + logImageName;
            try {
                File file = new File(fileName);
                multipartFile.transferTo(file);
            }
            catch (IllegalStateException e)
            {
                e.printStackTrace(); }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return uploadResp;
        }
    }
    
    public class UploadResp {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }s
    

    编写图片上传页面


    利用dropzone,下载地址:
    链接:https://pan.baidu.com/s/1thS43mCTVzVD0l9z2BT9MQ
    提取码:8pf6

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="plugins/dropzone/dropzone.js"></script>
        <script src="js/jquery-1.10.1.min.js"></script>
        <link rel="stylesheet" href="plugins/dropzone/dropzone.css">
    </head>
    <body>
    <div class="form-group">
        <label class="title">真人照(最多只能传一张)</label>
        <div id="dropz" class="dropzone"></div>//这段代码是展示dropzone.js的精髓
    </div>
    <input type="hidden" name="file_id" id="file_id"/>
    <script type="text/javascript">
      Dropzone.autoDiscover = false;
      $(document).ready(function () {
        var appElement = document.querySelector('div .inmodal');
        var myDropzone = new Dropzone("#dropz", {
          url: "/upload/image",//文件提交地址
          method:"post",  //也可用put
          paramName:"file", //默认为file
          maxFiles:1,//一次性上传的文件数量上限
          maxFilesize: 2, //文件大小,单位:MB
          acceptedFiles: ".jpg,.gif,.png,.jpeg", //上传的类型
          addRemoveLinks:true,
          parallelUploads: 1,//一次上传的文件数量
          //previewsContainer:"#preview",//上传图片的预览窗口
          dictDefaultMessage:'拖动文件至此或者点击上传',
          dictMaxFilesExceeded: "您最多只能上传1个文件!",
          dictResponseError: '文件上传失败!',
          dictInvalidFileType: "文件类型只能是*.jpg,*.gif,*.png,*.jpeg。",
          dictFallbackMessage:"浏览器不受支持",
          dictFileTooBig:"文件过大上传文件最大支持.",
          dictRemoveLinks: "删除",
          dictCancelUpload: "取消",
          init:function(){
            this.on("addedfile", function(file) {
              //上传文件时触发的事件
              document.querySelector('div .dz-default').style.display = 'none';
            });
            this.on("success",function(file,data){
              //上传成功触发的事件
              console.log('ok');
              $("#file_id").val(data.name);
            });
            this.on("error",function (file,data) {
              //上传失败触发的事件
              console.log('fail');
              var message = '';
              //lavarel框架有一个表单验证,
              //对于ajax请求,JSON 响应会发送一个 422 HTTP 状态码,
              //对应file.accepted的值是false,在这里捕捉表单验证的错误提示
              if (file.accepted){
                $.each(data,function (key,val) {
                  message = message + val[0] + ';';
                })
                //控制器层面的错误提示,file.accepted = true的时候;
                alert(message);
              }
            });
            this.on("removedfile",function(file){
              //删除文件时触发的方法
              var file_id = angular.element(appElement).scope().file_id;
              if (file_id){
                $.post('/admin/del/'+ file_id,{'_method':'DELETE'},function (data) {
                  console.log('删除结果:'+data.message);
                })
              }
              angular.element(appElement).scope().file_id = 0;
              document.querySelector('div .dz-default').style.display = 'block';
            });
          }
        });
      })
    
    </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:SpringMVC使用Dropzone.js上传图片

          本文链接:https://www.haomeiwen.com/subject/bwdojqtx.html