import cn.hutool.crypto.digest.MD5;
import io.minio.MinioClient;
import io.minio.policy.PolicyType;
import org.springframework.web.multipart.MultipartFile;
import java.util.Objects;
/**
* minio 相关的工具方法
* @author RondoChan
* @date 2022/9/30 14:18
*/
public class MinioUtil {
/**
*
* @param minioEndpoint minio 服务器地址
* @param minioAccessKey accessKey
* @param minioSecretKey secretKey
* @param minioBucketName 桶名称
* @param file 要上传的文件
* @return 上传后文件的 url
* @throws Exception 可能会上传失败
*/
public static String uploadFile2Minio(String minioEndpoint, String minioAccessKey, String minioSecretKey,String minioBucketName,MultipartFile file) throws Exception {
String[] split = Objects.requireNonNull(file.getOriginalFilename()).split("\\.");
String type = split.length == 2 ? split[1] : "";
return uploadFile2Minio(minioEndpoint, minioAccessKey, minioSecretKey,minioBucketName,file, type);
}
/**
* 上传文件到 minio
*
* @param file 上传的文件
* @param type 文件后缀
* @return 上传文件储存在 minio 服务器的 url
*/
public static String uploadFile2Minio(String minioEndpoint, String minioAccessKey, String minioSecretKey,String minioBucketName,MultipartFile file, String type) throws Exception {
MinioClient client = new MinioClient(minioEndpoint, minioAccessKey, minioSecretKey);
if (!client.bucketExists(minioBucketName)) {
client.makeBucket(minioBucketName);
client.setBucketPolicy(minioBucketName, "*.*", PolicyType.READ_ONLY);
}
// 根据文件流创建文件名称,防止文件内容相同时重复上传
String objectName = MD5.create().digestHex(file.getInputStream()) + "." + type;
// 不重复上传,奇怪,居然没有提供判断文件是否存在的 api
try {
client.statObject(minioBucketName, objectName);
} catch (Exception e) {
client.putObject(minioBucketName, objectName, file.getInputStream(), file.getContentType());
}
return minioEndpoint + "/" + minioBucketName + "/" + objectName;
}
}
MinIO 上传文件工具类
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 功能要求 java项目中所有的图片均使用对象存储BOS 准备材料 首先你要又百度bos的账号,找到自己的ak、sk...
- 查看minio官网,看到minio可以应用在不同的环境下,这里着重讲一下minio的js版,并在vue中运行,并且...