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 上传文件工具类
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 功能要求 java项目中所有的图片均使用对象存储BOS 准备材料 首先你要又百度bos的账号,找到自己的ak、sk...
- 查看minio官网,看到minio可以应用在不同的环境下,这里着重讲一下minio的js版,并在vue中运行,并且...