SpringBoot集成minio實現(xiàn)文件上傳和刪除功能
1.加入依賴
<!-- 對象存儲 Minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>2.yml配置
minio: endpoint: http://ip:9000 accessKey: accessKey secretKey: secretKey bucketName: bucketName
3.配置類
@Configuration
public class MinioConfig {
@Autowired
private MinioProperties minioProperties;
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build();
}
}4.屬性配置類
@ConfigurationProperties(prefix = "minio")
@Component
@Data
public class MinioProperties {
private String endpoint;
private String accessKey;
private String secretKey;
private String bucketName;
}5.工具類:示例文件上傳和刪除
@Component
@Slf4j
public class MinioUtil {
@Autowired
private MinioProperties minioProperties;
@Autowired
private MinioClient minioClient;
public String uploadFile(MultipartFile file, String bucketName) throws Exception {
if (file == null || file.getSize() == 0) {
log.error("==> 上傳文件異常:文件大小為空 ...");
throw new RuntimeException("請選擇需要上傳的文件");
}
String originalFileName = file.getOriginalFilename();
String contentType = file.getContentType();
String key = UUID.randomUUID().toString().replace("-", "");
String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
String objectName = String.format("%s%s", key, suffix);
log.info("==> 開始上傳文件至 Minio, ObjectName: {}", objectName);
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(contentType)
.build());
String url = String.format("%s/%s/%s", minioProperties.getEndpoint(), bucketName, objectName);
log.info("==> 上傳文件至 Minio 成功,訪問路徑: {}", url);
return url;
}
//刪除文件:
public boolean remove(String bucketName, String fileName) {
/**
* String bucketName = "test2";
* String fileName = "/2023-04-07/16808560218465670_img.png";
* address+bucketName+fileName 就是訪問路徑,刪除需要后兩個參數(shù)。
*/
try {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
} catch (Exception e) {
e.printStackTrace();
log.error("文件刪除失敗");
return false;
}
log.info("刪除成功");
return true;
}
}6.文件上傳示例
public R uploadFile(MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
String url = minioUtil.uploadFile(file, bucketName);
if (StringUtils.isNotEmpty(url)) {
File fileEntity = new File();
fileEntity.setBucketName(bucketName);
fileEntity.setFileName(fileName);
fileEntity.setMinioFileName(getMinioFileName(url));
fileEntity.setFilePath(url);
fileEntity.setCreateBy(LoginUtils.getUsername());
fileEntity.setCreateTime(new Date());
fileMapper.insert(fileEntity);
}
return R.ok(url);
} catch (Exception e) {
log.error("==> 上傳文件異常: ", e);
return R.fail("文件上傳失敗");
}
}7.文件刪除示例
public R remove(MinioFileDto fileDto) {
try {
boolean remove = minioUtil.remove(fileDto.getBucketName(), fileDto.getFileName());
if (remove) {
//刪除數(shù)據(jù)庫記錄
fileMapper.delete(new LambdaQueryWrapper<File>()
.eq(File::getBucketName, fileDto.getBucketName())
.eq(File::getMinioFileName, fileDto.getFileName()));
}
return R.ok();
} catch (Exception e) {
return R.fail("文件刪除失敗");
}
}到此這篇關(guān)于SpringBoot集成minio實現(xiàn)文件上傳和刪除功能的文章就介紹到這了,更多相關(guān)SpringBoot minio文件上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot3整合EasyExcel動態(tài)實現(xiàn)表頭重命名
這篇文章主要為大家詳細介紹了SpringBoot3整合EasyExcel如何通過WriteHandler動態(tài)實現(xiàn)表頭重命名,文中的示例代碼講解詳細,有需要的可以了解下2025-03-03
Java通過word模板實現(xiàn)創(chuàng)建word文檔報告
這篇文章主要為大家詳細介紹了Java如何通過word模板實現(xiàn)創(chuàng)建word文檔報告的教程,文中的示例代碼講解詳細,感興趣的小伙伴可以學(xué)習(xí)一下2022-09-09
Spring Cloud Alibaba之Sentinel實現(xiàn)熔斷限流功能
這篇文章主要介紹了Spring Cloud Alibaba之Sentinel,這里使用阿里的sentinel來實現(xiàn)熔斷限流功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細節(jié)
這篇文章主要介紹了Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細節(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

