• 前台传入base64图片,java后台转为MultipartFile文件


    package coml.utils;
    
    import org.apache.catalina.connector.Request;
    import org.springframework.web.multipart.MultipartFile;
    import sun.misc.BASE64Decoder;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.*;
    import java.util.UUID;
    
    /**
     * base64转为multipartFile工具类
     * base64Convert
     */
    
    public class Base64DecodeMultipartFile implements MultipartFile {
        private final byte[] imgContent;
        private final String header;
    
        public Base64DecodeMultipartFile(byte[] imgContent, String header) {
            this.imgContent = imgContent;
            this.header = header.split(";")[0];
        }
    
        @Override
        public String getName() {
            return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
        }
    
        @Override
        public String getOriginalFilename() {
            return System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1];
        }
    
        @Override
        public String getContentType() {
            return header.split(":")[1];
        }
    
        @Override
        public boolean isEmpty() {
            return imgContent == null || imgContent.length == 0;
        }
    
        @Override
        public long getSize() {
            return imgContent.length;
        }
    
        @Override
        public byte[] getBytes() throws IOException {
            return imgContent;
        }
    
        @Override
        public InputStream getInputStream() throws IOException {
            return new ByteArrayInputStream(imgContent);
        }
    
        @Override
        public void transferTo(File dest) throws IOException, IllegalStateException {
            new FileOutputStream(dest).write(imgContent);
        }
    
        /**
         * base64转multipartFile
         *
         * @param base64
         * @return
         */
        public static MultipartFile base64Convert(String base64) {
            String[] baseStrs = base64.split(",");
    
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] b = new byte[0];
            try {
                b = decoder.decodeBuffer(baseStrs[1]);
            } catch (IOException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            return new Base64DecodeMultipartFile(b, baseStrs[0]);
        }
    
        public static void main(String[] args) throws IOException {
            /**
             * base64转为multipartFile
             */
            MultipartFile file = base64Convert("data:video/mp4;base64,AAAAAAAA....==");//很长
    
            if (file.isEmpty()) {
                System.out.println("没有上传文件");
            }
    
            /**
             * 获取文件后缀
             */
            String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1)
                    .toLowerCase();
    
            /**
             * 重构文件名称
             */
            String pikId = UUID.randomUUID().toString().replaceAll("-", "");
            String fileName = pikId + "." + fileExt;
    
            /**
             * 存储路径可在配置文件中指定
             */
            File filePath = new File("D:/temp/test/");
            if (!filePath.exists()) {
                filePath.mkdirs();
            }
    
            File fileLast = new File(filePath, fileName);
    
            /**
             * 指定好存储路径
             * File file = new File(fileName);
             */
            try {
                /**
                 * 保存文件
                 * 使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
                 */
                file.transferTo(fileLast);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    ps_cc:制作sprite拼贴图片
    pc端的企业网站(IT修真院test9)详解一个响应式完成的pc端项目
    pc端的企业网站(IT修真院test8)详解1-4
    pc端的企业网站(IT修真院test8)详解1-3
    pc端的企业网站(IT修真院test8)详解1-2
    pc端的企业网站(IT修真院test8)详解1-1
    ps_cc切片
    Sublime Text通过插件编译Sass为CSS及中文编译异常解决
    PostCSS一种更优雅、更简单的书写CSS方式
    Gulp自动添加版本号
  • 原文地址:https://www.cnblogs.com/antao/p/13777997.html
Copyright © 2020-2023  润新知