Java Base64和File,MultipartFile之间的互相转换

1:Base64 转 File

public File base64ToFile(String base64, String filePath) {
    File file = new File(filePath);
    byte[] buffer;
    try {
        BASE64Decoder base64Decoder = new BASE64Decoder();
        buffer = base64Decoder.decodeBuffer(base64);
        FileOutputStream out = new FileOutputStream(filePath);
        out.write(buffer);
        out.close();
    } catch (Exception e) {
        log.error("TAG", "异常信息:" + e.getMessage());
    }
    return file;
}

2:File 转 Base64

public String fileToBase64(String filePath) {
	File file = new File(filePath);
	FileInputStream inputFile;
	try {
		inputFile = new FileInputStream(file);
		byte[] buffer = new byte[inputFile.available()];
		inputFile.read(buffer);
		inputFile.close();
		BASE64Encoder base64Encoder = new BASE64Encoder();
		Log.i("encodeFileToBase64", "encode = " + base64Encoder.encode(buffer));
		return base64Encoder.encode(buffer);
	} catch (Exception e) {
		log.error("异常信息:" + e.getMessage());
	}
	return "";
}

3:Base64 转 MultipartFile

    /**
     * base64转MultipartFile
     * @param base64String base64字符串
     * @param fileName 文件名称
     * @return
     * @throws IOException
     */
    private static MultipartFile base64ToMultipartFile(String base64String,String fileName ) {
        // 解码base64字符串 (如果base64有前缀如:data:image/jpg;base64,则需要去掉前缀,我这里有前缀,所以需要去掉)
        //有前缀
        //byte[] decode = Base64.getDecoder().decode(base64String.split(",")[1]);
        //无前缀
        byte[] decode = Base64.getDecoder().decode(base64String);
        // 创建字符串
        String name = fileName +  ".png"; // 文件名
        String contentType = "image/png"; // 内容类型
        return new MockMultipartFile(fileName, name, contentType, decode);
    }

4:MultipartFile转 Base64

    /**
     * 将MultipartFile 图片文件编码为base64
     *
     * @param file
     * @return
     * @throws Exception
     */
    public static String generateBase64(MultipartFile file) {
        if (file == null || file.isEmpty()) {
            throw new RuntimeException("图片不能为空!");
        }
        String contentType = file.getContentType();
        byte[] imageBytes = null;
        String base64EncoderImg = "";
        try {
            imageBytes = file.getBytes();
            BASE64Encoder base64Encoder = new BASE64Encoder();
            /**
             * 1.Java使用BASE64Encoder 需要添加图片头("data:" + contentType + ";base64,"),
             *   其中contentType是文件的内容格式。
             * 2.Java中在使用BASE64Enconder().encode()会出现字符串换行问题,这是因为RFC 822中规定,
             *   每72个字符中加一个换行符号,这样会造成在使用base64字符串时出现问题,
             *   所以我们在使用时要先用replaceAll("[\\s*\t\n\r]", "")解决换行的问题。
             */
            base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
            base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return base64EncoderImg;
    }

此文章借鉴了一个大佬的文章:

@S Y H

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值