java以base64文件格式导出excel表格

在项目中要求查询数据库并且用base64文件流的格式返回excel表格,自己试了好几种方法,最后找到的答案。

错误方式:用HSSFWorkbook直接生成相对应的文件,然后用base64转化,这种解析出来的文件是打不开的

String encode="data:application/vnd.ms-excel;base64,";
HSSFWorkbook wb = ExcelUtil.export(fileName, files, activityStatisticsVos);
byte[] bytes = wb.getBytes();
Base64.Encoder baseEncoder = Base64.getEncoder();
encode+= baseEncoder.encodeToString(bytes);

正确方式:

先创建文件,然后用FileOutputStream将HSSFWorkbook写入file文件中,然后将文件读出来,并且用base64进行加密成base64字符串。

生成文件:
File file=new File("test.xlsx");
HSSFWorkbook wb = ExcelUtil.export(fileName, files, activityStatisticsVos);
FileOutputStream fileOutputStream=new FileOutputStream(file);
wb.write(fileOutputStream);

文件生成base64字符串

BASE64Encoder encoder = new BASE64Encoder();
FileInputStream fin = null;
BufferedInputStream bin = null;
ByteArrayOutputStream baos = null;
BufferedOutputStream bout = null;
try {
    fin = new FileInputStream(document);
    bin = new BufferedInputStream(fin);
    baos = new ByteArrayOutputStream();
    bout = new BufferedOutputStream(baos);
    byte[] buffer = new byte[1024];
    int len = bin.read(buffer);
    while (len != -1) {
        bout.write(buffer, 0, len);
        len = bin.read(buffer);
    }
    //刷新此输出流并强制写出所有缓冲的输出字节
    bout.flush();
    byte[] bytes = baos.toByteArray();
    return encoder.encodeBuffer(bytes).trim();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        fin.close();
        bin.close();
        bout.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
return null;

你可能感兴趣的:(java以base64文件格式导出excel表格)