• MultipartFile类型文件和Base64文件类型判断、大小判断和像数验证


    1,MultipartFile类型文件

    是否为图片

                        String fileNameOriginal = file.getOriginalFilename();// 文件原名
                        System.out.println("上传文件名:"+fileNameOriginal);
                        String mimeType = request.getServletContext().getMimeType(fileNameOriginal);
                        if (mimeType.startsWith("image/")) {
    //图片
    }

    2,像数和大小

    /****
         * 添加上传图片文件规则验证 
         * 1,请上传像素为1080*1080的图片或正方形像素图片, 
         * 2,单张图片不超过20M
         * 
         * @param file
         * @return
         * @throws IOException 
         */
        public boolean checkImage(MultipartFile file, int size) throws IOException {
            long maxSize = size * 1024 * 1024;
            if (file.getSize() > maxSize) {
                return false;
            }
            BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
                if (bufferedImage != null) {
                    Integer width = bufferedImage.getWidth();
                    Integer height = bufferedImage.getHeight();
    
                    if (width != height) {
                        return false;
                    }
                }
            
            return true;
        }

     2,Base64加密文件上传验证大小和像素

     /****
         * 上传文件是否图片
         * @param base64Str
         * @return
         */   
        public static boolean checkImageBase64Format(String base64ImgData)  {
            boolean flag=false;
            
            String fileSuffix = "";
              try {
                    if (base64ImgData.contains("@@")) {
                        String[] split = base64ImgData.split("@@");
                        base64ImgData = split[1];
                        fileSuffix = split[0];
                    }
    
                    if (base64ImgData.contains(",")) {
                        String[] split = base64ImgData.split(",");
                        base64ImgData = split[1];
                        fileSuffix = split[0].substring(split[0].indexOf('/') + 1, split[0].indexOf(';'));
                    }
                } catch (Exception e) {
                    e.printStackTrace();               
                }
            switch (fileSuffix) {
            case "jpeg": flag=true;break;
            case "png": flag=true;break;
            case "jpg": flag=true;break;        
            default:break;
            }
                  
            return flag;
        }
     /****
         *  添加上传图片文件规则验证 
         * 1,请上传像素为1080*1080的图片或正方形像素图片, 
            * 2,单张图片不超过20M
         * @param file,size
         * @return
         * @throws IOException 
         */    
        public static boolean checkImage(String file,int size)  {
            long maxSize = size * 1024 * 1024;              
               String str=file.substring(22); // 1.需要计算文件流大小,首先把头部的data:image/png;base64,(注意有逗号)去掉。
               Integer equalIndex= str.indexOf("=");//2.找到等号,把等号也去掉
               if(str.indexOf("=")>0) {
                   str=str.substring(0, equalIndex);
               }
               Integer strLength=str.length();//3.原来的字符流大小,单位为字节
               long fileSize =strLength-(strLength/8)*2;//4.计算后得到的文件流大小,单位为字节         
               if (fileSize > maxSize) {
                   return false;
               }
               BufferedImage bufImg;
            try {
                /***
                 * 验证前去掉data:image/jpeg;base64,
                 */                        
                bufImg = ImageIO.read(new ByteArrayInputStream(Base64.decodeBase64(str.getBytes("utf-8"))));                
                if(bufImg!=null) {
                    int height=bufImg.getHeight();
                    int width=bufImg.getWidth();            
                    if(height!=width) {
                        return false; 
                    }                
                }
                
            } catch (IOException e) {
                
                e.printStackTrace();
            }
            
            return true;
        }
    好记性不如烂笔头
  • 相关阅读:
    简易温控器的开发
    信号处理电路1:差动转单端输出电路计算于分析
    电容触摸屏资料适合7寸30PINS
    TI Motor Control
    AD规则实例1元件keepout层与覆铜间距
    Python基础语法
    Python基本运算符
    Python 字符串
    javascript>getElementsByClass
    thrift多平台安装
  • 原文地址:https://www.cnblogs.com/codehello/p/15351906.html
Copyright © 2020-2023  润新知