今天遇到在Java后台将本地文件转成Base64,然后传至前端ajax异步请求结果,并手动保存文件。我使用的是 java1.8
1、Java中 — — 文件与Base64相互转换
文件 ——> Base64,下面两行代码即可
byte[] b = Files.readAllBytes(Paths.get(filePath));//filePath为D://123.*,*表示任何类型文件
String data_base64 = Base64.getEncoder().encodeToString(b);//取得文件Base64数据
Base ——> 文件,这个还没试过,应该没问题
public String decryptByBase64(String base64, String filePath) {
if (base64 == null && filePath == null) {
return "生成文件失败,请给出相应的数据。";
}
try {
Files.write(Paths.get(filePath),
Base64.getDecoder().decode(base64),StandardOpenOption.CREATE);
} catch (IOException e) {
e.printStackTrace();
}
return "指定路径下生成文件成功!";
}
2、JS中 — — 文件与Base64相互转换
文件 ——> Base64
function getBase64(element) {
// var file = element.files[0];
var file = document.getElementById("file").files[0]
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
var data_base64 = this.result; //JS读取后是有头信息的data:image/jpeg;base64,头信息后面才是文件的Base64数据
console.log(data_base64)
}
}
Base ——> 文件
/**
*Base64字符串转二进制
*/
function dataURLtoBlob(dataurl) {
bstr = atob(dataurl),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr]);
}
var blob = dataURLtoBlob("去除头信息的纯Base64数据");
var data = new Blob([blob]);
var downloadUrl = window.URL.createObjectURL(data);
var result=document.getElementById("result");
var anchor = document.createElement("a");
anchor.href = downloadUrl;
anchor.download = "下载保存文件到名称.*";//*表示可以是任意类型的文件
anchor.click();
window.URL.revokeObjectURL(data);