废话不多少,直接上代码
前端代码
<!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);
}