Base64解码文件下载

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

一、Base64文件

​ 在项目中,数据库中存放文件使用的是mediumblob类型的二进制格式,这里用file_stream字段来表示,在java后台中的mysql返回参数中使用cast(file_stream as char)转为base64。

​ 目前存放的有三类文件,分别是图片、word、pdf。理论上来说,将Base64文件的字符串直接输入到浏览器的地址栏中就可以直接访问,但是发现超过一定大小的文件就没办法直接在浏览器中打开了,所以需要通过后台将Base64文件下载到本地查看。

Base64图片文件的格式如下:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATEAAAElCAYAAACMItXlAAAgAElEQVR4nO2dB5RURdqGa8g5g+QMklSQbCArSYK7IMlfFAUFDJgTCouKAWWVlSyKuwKC7EpUVKJZokrOOecokuY/bzGNMEz...

image-20201215102058197

二、下载Base64文件

​ 思路解析:将Base64解码为字节数组->将字节数组通过FileOutputStream输出到文件

  1. 首先我们需要借助Base64工具类
import java.io.IOException;

public class Base64Utils {
    /**
     * 编码
     * @param content
     * @return
     */
    public static String encode(byte[] content) {
        return new sun.misc.BASE64Encoder().encode(content);
    }

    /**
     * 解码
     * @param source
     * @return
     */
    public static byte[] decode(String source) {
        try {
            sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
            return decoder.decodeBuffer(source);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
  1. 将Base64字符串进行解码为字节数组,并输出到本地图片(PDF、docx等其他格式文件同理)
public static void main(String[] args) {
    // 若没有base64字符串做测试,则可以用本地文件转base64进行实验
    // File file = new File("E:\\test.txt");
    // byte[] bFile = new byte[(int) file.length()];
    String base64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATEAAAElCAYAAACMItXlAAAgAElE...";
    // 使用Base64Utils的decode方法进行解码
    byte[] fileBytes = Base64Utils.decode(base64);
    try (FileOutputStream fileOuputStream = new FileOutputStream("D:\\1.png")) {
        fileOuputStream.write(fileBytes);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

三、总结

​ 难点在于Base64文件的下载需要先解码再转File下载,并且需要对Base64有一定的理解。

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值