文件转为base64文件和base64字符串转为MultipartFile文件

文件转为base64文件

	/**
     * 通过文件生成base64文件
     * @param filePath 文件
     * @return String
     */
    public static String createBase64ByFile(String filePath){
    
    
        Base64.Encoder encoder = Base64.getEncoder();
        byte[] fileBytes = null;
        FileInputStream inputStream = null;

        try {
    
    
            inputStream = new FileInputStream(filePath);
            try {
    
    
                fileBytes = new byte[inputStream.available()];
                inputStream.read(fileBytes);
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            if (null != inputStream){
    
    
                try {
    
    
                    inputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
        return encoder.encodeToString(fileBytes);
    }

    /**
     * 通过文件输入流生成base64文件
     * @param inputStream 输入流
     * @return String
     */
    public String createBase64ByInputStream(InputStream inputStream){
    
    
        Base64.Encoder encoder = Base64.getEncoder();
        byte[] fileBytes = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        try {
    
    
            byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] buff = new byte[100];
            int rc = 0;
            while ((rc = inputStream.read(buff, 0, 100)) > 0) {
    
    
                byteArrayOutputStream.write(buff, 0, rc);
            }
            fileBytes = byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            if (byteArrayOutputStream != null) {
    
    
                try {
    
    
                    byteArrayOutputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if (inputStream != null) {
    
    
                try {
    
    
                    inputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
        return encoder.encodeToString(fileBytes);
    }

base64字符串转为MultipartFile文件

String baseString = (String)map.get("base64String");
 // 将Base64字符串解码为字节数组
byte[] bytes = Base64.decode(baseString);
 String filename = "example";
MultipartFile file = new Base64DecodedMultipartFile(bytes, filename);

编写Base64DecodedMultipartFile类实现MultipartFile 接口重写方法

package com.gremlin.config;

import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author gremlin
 */
public class Base64DecodedMultipartFile implements MultipartFile {
    
    
        private final byte[] bytes;
        private final String name;
        private final String originalFileName;
        private final String contentType;

        public Base64DecodedMultipartFile(byte[] bytes, String filename) {
    
    
            this.bytes = bytes;
            this.name = "file";
            this.originalFileName = filename;
            // 这里需要根据实际情况设置文件类型
            this.contentType = "application/octet-stream";
        }

        @Override
        public String getName() {
    
    
            return name;
        }

        @Override
        public String getOriginalFilename() {
    
    
            return originalFileName;
        }

        @Override
        public String getContentType() {
    
    
            return contentType;
        }

        @Override
        public boolean isEmpty() {
    
    
            return bytes == null || bytes.length == 0;
        }

        @Override
        public long getSize() {
    
    
            return bytes.length;
        }

        @Override
        public byte[] getBytes() throws IOException {
    
    
            return bytes;
        }

        @Override
        public InputStream getInputStream() throws IOException {
    
    
            return new ByteArrayInputStream(bytes);
        }

        @Override
        public void transferTo(File file) throws IOException, IllegalStateException {
    
    
            new FileOutputStream(file).write(bytes);
        }
    }

猜你喜欢

转载自blog.csdn.net/rq12345688/article/details/127982198