SpringBoot集成minio實(shí)現(xiàn)文件上傳和刪除功能
1.加入依賴
<!-- 對(duì)象存儲(chǔ) 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("請(qǐng)選擇需要上傳的文件"); } 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("==> 開(kāi)始上傳文件至 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 成功,訪問(wèn)路徑: {}", url); return url; } //刪除文件: public boolean remove(String bucketName, String fileName) { /** * String bucketName = "test2"; * String fileName = "/2023-04-07/16808560218465670_img.png"; * address+bucketName+fileName 就是訪問(wèn)路徑,刪除需要后兩個(gè)參數(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ù)庫(kù)記錄 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實(shí)現(xiàn)文件上傳和刪除功能的文章就介紹到這了,更多相關(guān)SpringBoot minio文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea 多模塊項(xiàng)目依賴父工程class找不到問(wèn)題的方法
這篇文章主要介紹了idea 多模塊項(xiàng)目依賴父工程class找不到問(wèn)題的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01SpringBoot3整合EasyExcel動(dòng)態(tài)實(shí)現(xiàn)表頭重命名
這篇文章主要為大家詳細(xì)介紹了SpringBoot3整合EasyExcel如何通過(guò)WriteHandler動(dòng)態(tài)實(shí)現(xiàn)表頭重命名,文中的示例代碼講解詳細(xì),有需要的可以了解下2025-03-03Java通過(guò)word模板實(shí)現(xiàn)創(chuàng)建word文檔報(bào)告
這篇文章主要為大家詳細(xì)介紹了Java如何通過(guò)word模板實(shí)現(xiàn)創(chuàng)建word文檔報(bào)告的教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-09-09Spring Cloud Alibaba之Sentinel實(shí)現(xiàn)熔斷限流功能
這篇文章主要介紹了Spring Cloud Alibaba之Sentinel,這里使用阿里的sentinel來(lái)實(shí)現(xiàn)熔斷限流功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Hikari?數(shù)據(jù)庫(kù)連接池內(nèi)部源碼實(shí)現(xiàn)的小細(xì)節(jié)
這篇文章主要介紹了Hikari?數(shù)據(jù)庫(kù)連接池內(nèi)部源碼實(shí)現(xiàn)的小細(xì)節(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Java操作PDF文件實(shí)現(xiàn)簽訂電子合同詳細(xì)教程
這篇文章主要介紹了如何在PDF中加入電子簽章與電子簽名的過(guò)程,包括編寫Word文件、生成PDF、為PDF格式做表單、為表單賦值、生成文檔以及上傳到OBS中的步驟,需要的朋友可以參考下2025-01-01