最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成minio實現(xiàn)文件上傳和刪除功能

 更新時間:2023年11月23日 09:42:46   作者:我心向陽cd  
這篇文章主要介紹了SpringBoot集成minio實現(xiàn)文件上傳和刪除功能,詳細(xì)介紹每個功能的實現(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)文章

  • 在Struts2中如何將父類屬性序列化為JSON格式的解決方法

    在Struts2中如何將父類屬性序列化為JSON格式的解決方法

    本篇文章,小編將為大家介紹關(guān)于在Struts2中如何將父類屬性序列化為JSON格式的解決方法,有需要的朋友可以參考一下
    2013-04-04
  • Java如何實現(xiàn)CIDR轉(zhuǎn)IP段

    Java如何實現(xiàn)CIDR轉(zhuǎn)IP段

    CIDR是一種用于高效分配和管理?IP?地址的網(wǎng)絡(luò)編址方法,這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)CIDR轉(zhuǎn)IP段,感興趣的小伙伴可以參考一下
    2025-03-03
  • springboot使用yml文件配置多環(huán)境方式(dev、test、prod)

    springboot使用yml文件配置多環(huán)境方式(dev、test、prod)

    這篇文章主要介紹了springboot使用yml文件配置多環(huán)境方式(dev、test、prod),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • JAVA中常見異常類

    JAVA中常見異常類

    本文主要介紹了JAVA中的常見異常類。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Java輸入處理的常見錯誤小結(jié)

    Java輸入處理的常見錯誤小結(jié)

    在?Java?編程中,輸入處理是一個基礎(chǔ)但又復(fù)雜的任務(wù),尤其是在涉及到與用戶交互時,本文將對?Java?輸入處理的基本機(jī)制進(jìn)行詳細(xì)解析,需要的可以了解下
    2024-11-11
  • Java如何獲取一個隨機(jī)數(shù) Java猜數(shù)字小游戲

    Java如何獲取一個隨機(jī)數(shù) Java猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了Java如何獲取一個隨機(jī)數(shù),類似猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 利用Java8 Optional如何避免空指針異常詳解

    利用Java8 Optional如何避免空指針異常詳解

    Optional可以讓你的代碼具有可讀性,且會避免出現(xiàn)空指針異常。 下面這篇文章主要給大家介紹了關(guān)于利用Java8 Optional如何避免空指針異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-01-01
  • Spring使用@Value注解與@PropertySource注解加載配置文件操作

    Spring使用@Value注解與@PropertySource注解加載配置文件操作

    這篇文章主要介紹了Spring使用@Value注解與@PropertySource注解加載配置文件操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot+Vue實現(xiàn)動態(tài)菜單的思路梳理

    SpringBoot+Vue實現(xiàn)動態(tài)菜單的思路梳理

    這篇文章主要為大家詳細(xì)介紹了利用SpringBoot+Vue實現(xiàn)動態(tài)菜單的思路梳理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動手嘗試一下
    2022-07-07
  • Java二叉樹中LCA問題解決方法兩則

    Java二叉樹中LCA問題解決方法兩則

    這篇文章主要介紹了Java二叉樹中LCA問題解決方法,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2022-12-12

最新評論

安平县| 武山县| 信丰县| 开阳县| 栖霞市| 德昌县| 边坝县| 乌兰县| 忻城县| 阳山县| 福鼎市| 郁南县| 水富县| 华坪县| 洪洞县| 云安县| 清镇市| 慈溪市| 商都县| 五莲县| 牙克石市| 铁力市| 织金县| 龙山县| 读书| 利辛县| 木兰县| 巴中市| 大安市| 土默特左旗| 郁南县| 石门县| 志丹县| 怀仁县| 澄城县| 称多县| 阿克| 巴南区| 信丰县| 阳谷县| 墨江|