1、前端将通过base64加密后的图片传递到后端,后端接收到显示格式为
data:[<mediatype>][;base64],<data>
data:协议固定前缀。
[<mediatype>] : 是一个 MIME type,比如 image/jpeg。
[;base64] : 是编码方式。 这里用的 base64。
<data> : 编码后的字符串。
2、java后端解密保存到本地
//base64编码的字符串
String base64 = "data:image\jpeg;base64.......";
//生成随机文件名并拼接上后缀.jpg
String imgClassPath = UUID.randomUUID().toString().concat(".jpg");
// 去掉base64前缀 data:image/jpeg;base64,一定一定
base64 = base64.substring(base64.indexOf(",", 1) + 1);
BASE64Decoder decoder = new BASE64Decoder();
//Base64解码
byte[] imgbytes = decoder.decodeBuffer(base64);
for (int i = 0; i < imgbytes.length; ++i) {
//调整异常数据
if (imgbytes[i] < 0) {
imgbytes[i] += 256;
}
}
//1、保存为文件流上传到阿里云OSS
InputStream sbs = new ByteArrayInputStream(imgbytes);
//上传oss服务器
String result = aliOSSUtils.uploadBase64(sbs,imgClassPath);
System.out.println(result);
//2、文件保存到本地路径
//本地保存路径
//String savePath = "C:\\Users\\99077\\Pictures\\cesih\\";
// //生成jpeg图片,保存路径拼接上文件名
// OutputStream out = new FileOutputStream(savePath.concat(imgClassPath));
//写入到本地
// out.write(imgbytes);
// out.flush();
// out.close();
3、阿里云上传方法aliOSSUtils.uploadBase64代码:
public String uploadBase64(InputStream ico,String nameSuffix) throws IOException {
//获取阿里云OSS参数
String endpoint = aliOSSProperties.getEndpoint();
String accessKeyId = aliOSSProperties.getAccessKeyId();
String accessKeySecret = aliOSSProperties.getAccessKeySecret();
String bucketName = aliOSSProperties.getBucketName();
//外面获取文件输入流,最后方便关闭
//2 创建OssClient对象
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//3 获取文件信息,为了上传
// meta设置请求头
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("image/jpg");
//4 设置知道文件夹
ossClient.putObject(bucketName, nameSuffix, ico, meta);
//5 关闭ossClient
ossClient.shutdown();
//6 返回上传之后地址,拼接地址
String uploadUrl = "https://" + bucketName + "." + endpoint + "/" + nameSuffix;
ico.close();
return uploadUrl;
}