废话不多多,直接上代码
第一步、引入相应包
com.qcloud cos_api5.6.61 io.minio minio8.2.1
第二步 、写cos与minio相关配置类
@Configuration @Data public class CosProperties { @Value("${cos.endpoint:}") private String endpoint; @Value("${cos.accesskey:}") private String accesskey; @Value("${cos.secretKey:}") private String secretKey; @Value("${cos.bucket:}") private String bucket; @Value("${cos.region:}") private String region; @Value("${cos.scheme:}") private String scheme; @Value("${cos.token:}") private String token; }@Component @ConfigurationProperties("minio") @Data public class MinioProperties { private String endpoint; private String accesskey; private String secretKey; private String bucket; }
第三步、初始客户端
@Configuration public class FileClientConfiguration { @Autowired private MinioProperties minioProperties; @Resource private CosProperties cosProperties; @Bean public MinioClient minioClient() { MinioClient client = MinioClient.builder().endpoint(minioProperties.getEndpoint()) .credentials(minioProperties.getAccesskey(), minioProperties.getSecretKey()).build(); return client; } @Bean public COSClient COSClientInit() { COSCredentials credentials = new BasicCOSCredentials(cosProperties.getAccesskey(), cosProperties.getSecretKey()); ClientConfig clientConfig = new ClientConfig(new Region(cosProperties.getRegion())); // 创建 COS 客户端连接 COSClient cosClient = new COSClient(credentials, clientConfig); return cosClient; } }
第四步、工具类简单封装
@Component
@Slf4j
public class FileUploadUtils {
@Resource
private MinioClient minioClient;
@Resource
private COSClient cosClient;
@Resource
private MinioProperties minioProperties;
@Resource
private CosProperties cosProperties;
@Resource
private GlobalParamConfig globalParamConfig;
public String upload(MultipartFile file) {
String filePath = null;
try {
String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 设置存储对象名称
filePath = sdf.format(new Date()) + "/" + filename;
//minio
if (BrainConstants.FILE_UPLOAD_MINIO.equalsIgnoreCase(globalParamConfig.getFileType())) {
String bucketName = minioProperties.getBucket();
//创建头部信息
Map headers = new HashMap<>();
//添加自定义内容类型
headers.put("Content-Type", "application/octet-stream");
//添加存储类
headers.put("X-Amz-Storage-Class", "REDUCED_REDUNDANCY");
// 使用putObject上传一个文件到存储桶中
PutObjectArgs build = PutObjectArgs.builder().bucket(bucketName).object(filePath).stream(
file.getInputStream(), file.getSize(), -1)
.headers(headers)
.build();
minioClient.putObject(build);
log.info("文件上传minio成功!");
} else {//腾讯cos
File varFile = MultipartFileToFile.toFile(file, filePath);
// 将 文件上传至 COS
PutObjectRequest objectRequest = new PutObjectRequest(cosProperties.getBucket(), filePath, varFile);
cosClient.putObject(objectRequest);
log.info("文件上传cos成功!");
}
return filePath;
} catch (Exception e) {
log.error("minio上传发生错误: {}!", e.getMessage());
}
return null;
}
public boolean delete(String filePath) {
try {
if (BrainConstants.FILE_UPLOAD_MINIO.equalsIgnoreCase(globalParamConfig.getFileType())) {
String bucketName = minioProperties.getBucket();
RemoveObjectArgs build = RemoveObjectArgs.builder().bucket(bucketName).object(filePath).build();
minioClient.removeObject(build);
} else {
cosClient.deleteObject(cosProperties.getBucket(), filePath);
}
return true;
} catch (Exception e) {
log.error("minio删除发生错误: {}!", e.getMessage());
}
return false;
}
public InputStream dowlod(String filePath) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
if (BrainConstants.FILE_UPLOAD_MINIO.equalsIgnoreCase(globalParamConfig.getFileType())) {
String bucketName = minioProperties.getBucket();
GetObjectArgs build = GetObjectArgs.builder().bucket(bucketName).object(filePath).build();
InputStream object = minioClient.getObject(build);
return object;
} else {
COSObject object = cosClient.getObject(cosProperties.getBucket(), filePath);
COSObjectInputStream objectContent = object.getObjectContent();
return objectContent;
}
}
}



