Java 导出文件流转base64

1,521 阅读1分钟

废话不多少,直接上代码

前端代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>base64ToExcel</title>
    </head>
    <body>
        请输入base64串
        <button onclick="submit()">生成excel</button>
        <br /><br />
        <input id="test" style="width: 800px; height: 30px" />

        <script>
            function submit() {
                let data = document.getElementById("test").value;
                saveData(data, "test.xlsx");
            }

            function saveData(data, filename) {
                let blob = dataURItoBlob(data);
                let objectUrl = URL.createObjectURL(blob);
                //let spl = filename.split(".");
                //window.open(objectUrl,'_blank','alwaysRaised=yes,height=500, width=800, toolbar= no, menubar=no, scrollbars=no, resizable=no, location=yes, status=no,top=100,left=300')
                let aLink = document.createElement("a"); //新添加的  尝试
                let evt = document.createEvent("HTMLEvents");
                evt.initEvent("click", true, true);
                aLink.download = filename; //新添加的  尝试
                aLink.href = objectUrl;
                aLink.click();
                //没有清理的 DOM 元素引用
                //document.body.removeChild(aLink)
            }
            /**
             * base64  to blob二进制
             */
            function dataURItoBlob(dataURI) {
                debugger;
                var byteString = window.atob(dataURI); //base64 解码
                var arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组
                var intArray = new Uint8Array(arrayBuffer); //创建视图
                for (var i = 0; i < byteString.length; i++) {
                    intArray[i] = byteString.charCodeAt(i);
                }

                // return new Blob([intArray],{type: "application/vnd.ms-excel;charset=utf-8;"});//原来封装好的 下载的是excel

                return new Blob([intArray], {
                    type: "application/octet-stream;charset=utf-8;",
                }); //修改-1
            }
        </script>
    </body>
</html>

后段代码

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>
/**
 * 导出文件base64
 *
 * @param data
 * @param clazz
 * @param sheetName
 * @author gangchenxue
 * @date 2021/12/23 下午2:20
 * @return java.lang.String
 */
public static <T>String exportExcelToBase64(Collection<T> data, Class<T> clazz, String sheetName) {

    ByteArrayOutputStream out = null;
    try {
        out = new ByteArrayOutputStream();
        ExcelWriter excelwriter = EasyExcel.write(out).build();
        WriteSheet sheet = EasyExcel.writerSheet(1, sheetName).build();
        WriteTable table = new WriteTable();
        table.setClazz(clazz);
        excelwriter.write(data, sheet, table);
        excelwriter.finish();
        InputStream inputStream = new ByteArrayInputStream(out.toByteArray());
        return fileToBase64(inputStream);
    } catch (Exception e) {
        logger.error("导出失败,失败原因:{}", e);
    }
    return null;
}


/**
 * 将文件转base64字符串
 *
 * @param inputStream
 * @author gangchenxue
 * @date 2021/12/23 下午2:21
 * @return java.lang.String
 */
public static String fileToBase64(InputStream inputStream) {
    // 将文件转化为字节数组字符串,并对其进行Base64编码处理
    byte[] data = null;
    // 读取文件字节数组
    try {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[2048];
        int rc = 0;
        while ((rc = inputStream.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        data = swapStream.toByteArray();
    } catch (IOException e) {
        logger.error("转换失败,失败原因:{}", e);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                logger.error("转换失败,失败原因:{}", e);
            }
        }
    }

    return Base64.encodeBase64String(data);
}