Minio介绍
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议
1.Base64格式上传Minio
前端Js将图片转为Base64格式
let imageaddr = ""; //图片地址
var Base64Image = "data:image/png;base64," + wx.getFileSystemManager().readFileSync(imageaddr, "base64")
2.Base64格式上传Minio
pom.xml 引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
<!-- 8.4.2-->
</dependency>
2.Base64格式上传Minio
实现代码
@ApiOperation(value = "Minio桶工具类-上传图片", notes = "Minio桶工具类-上传图片")
@PostMapping(value = "/uploadFile")
private String uploadFile(@RequestBody JSONObject reqJson) throws InvalidKeyException, IOException, NoSuchAlgorithmException {
try {
//你的endpoint,本机可以不变
String endpoint = "";
//你的accessKey
String accessKey = "";
//你的sercetKey
String secretKey = "";
//你的bucket
String bucketName = "";
// 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
// 检查存储桶是否已经存在
boolean isExist = minioClient.bucketExists(bucketName);
if (isExist) {
System.out.println("Bucket already exists.");
} else {
// 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
minioClient.makeBucket(bucketName);
}
JSONArray jsonArray = JSONArray.parseArray(reqJson.getString("imageaddr"));
String ImageAdd = "";
for (int z = 0; z <= jsonArray.size() - 1; z++) {
String imageaddr = jsonArray.getJSONObject(z).toString().substring(8, jsonArray.getJSONObject(z).toString().length() - 2);
// 解密
Base64.Decoder decoder = Base64.getDecoder();
// 去掉base64前缀 data:image/jpeg;base64,
imageaddr = imageaddr.substring(imageaddr.indexOf(",", 1) + 1, imageaddr.length());
byte[] decode = decoder.decode(imageaddr);
// 处理数据
for (int i = 0; i < decode.length; ++i) {
if (decode[i] < 0) {
decode[i] += 256;
}
}
InputStream byteArrayInputStream = new ByteArrayInputStream(decode);
// 生成文件名称
String nameSuffix = UUID.randomUUID().toString() + ".png";
String url = "/show?fileName=" + nameSuffix;
if (z == jsonArray.size() - 1) {
ImageAdd += bucketName + "/" + nameSuffix;
} else {
ImageAdd += bucketName + "/" + nameSuffix + ",";
}
// 上传配置
PutObjectOptions options = new PutObjectOptions(byteArrayInputStream.available(), PutObjectOptions.MIN_MULTIPART_SIZE);
options.setContentType("image/png");
minioClient.putObject(bucketName, nameSuffix, byteArrayInputStream, options);
}
return ImageAdd;
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
return null;
}
}