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

對象存儲服務MinIO快速入門(集成項目的詳細過程)

 更新時間:2025年03月10日 09:56:41   作者:二本也有大廠夢  
MinIO是一個開源的對象存儲服務,支持多種操作系統(tǒng),配置簡單且性能高,它使用糾刪碼進行數(shù)據(jù)保護,可以容忍硬件故障,MinIO支持多種語言的SDK和豐富的API,本文介紹對象存儲服務MinIO快速入門,感興趣的朋友一起看看吧

對象存儲服務MinIO

MinIO簡介

MinIO基于Apache License v2.0開源協(xié)議的對象存儲服務,可以做為云存儲的解決方案用來保存海量的圖片,視頻,文檔。由于采用Golang實現(xiàn),服務端可以工作在Windows,Linux, OS X和FreeBSD上。配置簡單,基本是復制可執(zhí)行程序,單行命令可以運行起來。

MinIO特點

  • 數(shù)據(jù)保護

Minio使用Minio Erasure Code(糾刪碼)來防止硬件故障。即便損壞一半以上的driver,但是仍然可以從中恢復。

  • 高性能

作為高性能對象存儲,在標準硬件條件下它能達到55GB/s的讀、35GB/s的寫速率

  • 可擴容

不同MinIO集群可以組成聯(lián)邦,并形成一個全局的命名空間,并跨越多個數(shù)據(jù)中心

  • SDK支持

基于Minio輕量的特點,它得到類似Java、Python或Go等語言的sdk支持

  • 有操作頁面

面向用戶友好的簡單操作界面,非常方便的管理Bucket及里面的文件資源

  • 功能簡單

這一設計原則讓MinIO不容易出錯、更快啟動

  • 豐富的API

支持文件資源的分享連接及分享鏈接的過期策略、存儲桶操作、文件列表訪問及文件上傳下載的基本功能等。

  • 文件變化主動通知

存儲桶(Bucket)如果發(fā)生改變,比如上傳對象和刪除對象,可以使用存儲桶事件通知機制進行監(jiān)控,并通過以下方式發(fā)布出去:AMQP、MQTT、Elasticsearch、Redis、NATS、MySQL、Kafka、Webhooks等。

一、安裝啟動

我采用的是docker安裝

docker pull minio/minio

創(chuàng)建配置文件目錄和上傳目錄

mkdir -p /home/minio/configmkdir -p /home/minio/data

啟動容器

docker run -p 9000:9000 -p 9090:9090 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=admin" \
     -e "MINIO_SECRET_KEY=admin123456" \
     -v /home/minio/data:/data \
     -v /home/minio/config:/root/.minio \
     minio/minio server \
     /data --console-address ":9090" -address ":9000"

假設我們的服務器地址為http://192.168.200.100:9000,我們在地址欄輸入:http://http://192.168.200.100:9000/ 即可進入登錄界面。

Access Key為admin ,Secret_key 為admin123456進入系統(tǒng)后可以看到主界面

一、快速入門

創(chuàng)建springboot項目

1 導入依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>7.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

在配置文件中導入

minio:
  accessKey: admin
  secretKey: admin123456
  bucket: text
  endpoint: http://192.168.200.100:9000
  readPath: http://192.168.200.100:9000

2 配置類

MinIOProperties

@Configuration
@Data
@ConfigurationProperties(prefix = "minio")
public class MinIOProperties {
    private String accessKey;
    private String secretKey;
    private String bucket;
    private String endpoint;
    private String readPath;
}

MinIOClientConfig

@Data
@Primary
@Configuration
public class MinIOClientConfig {
   @Autowired
   private MinIOProperties minIOProperties;
    @Bean
    public MinioClient buildMinioClient(){
        return MinioClient
                .builder()
                .credentials(minIOProperties.getAccessKey(), minIOProperties.getSecretKey())
                .endpoint(minIOProperties.getEndpoint())
                .build();
    }
}

3 開始業(yè)務

Controller

@RestController
@RequestMapping("minio")
public class UploadController {
    @Autowired
    private FileService fileService;
    @PostMapping("/upload")
    public String uploadMinio(@RequestPart("file") MultipartFile file) {
        return fileService.uploadMinio(file);
    }
}

Service

public interface FileService {
    public String uploadMinio(MultipartFile file) ;
}

ServiceImpl

@Slf4j
@Service
public class FileServiceImpl implements FileService {
    @Autowired
    private MinioClient minioClient;
    @Autowired
    private MinIOProperties minioProperties;
    @Override
    public String uploadMinio(MultipartFile file) {
        System.out.println(minioProperties);
        try {
            // 判斷桶是否存在
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucket()).build());
            if (!found) {       // 如果不存在,那么此時就創(chuàng)建一個新的桶
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucket()).build());
            } else {  // 如果存在打印信息
                System.out.println("Bucket 'daijia' already exists.");
            }
            // 設置存儲對象名稱
            String extFileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            String fileName = new SimpleDateFormat("yyyyMMdd")
                    .format(new Date()) + "/" + UUID.randomUUID().toString().replace("-" , "") + "." + extFileName;
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(minioProperties.getBucket())
                    .stream(file.getInputStream(), file.getSize(), -1)
                    .object(fileName)
                    .build();
            minioClient.putObject(putObjectArgs) ;
            return minioProperties.getEndpoint() + "/" + minioProperties.getBucket() + "/" + fileName ;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "error";
    }
}

4 測試

點擊連接,就可以開始下載圖片

如果發(fā)現(xiàn)圖片報錯,去控制臺把Access Policy 改成Pubilc

完成。

不用web的方式也可以上傳圖片:

Service

public interface FileStorageService {
    /**
     *  上傳圖片文件
     * @param prefix  文件前綴
     * @param filename  文件名
     * @param inputStream 文件流
     * @return  文件全路徑
     */
    public String uploadImgFile(String prefix, String filename,InputStream inputStream);
  	/**
     * 刪除文件
     * @param pathUrl  文件全路徑
     */
    public void delete(String pathUrl);
}

ServiceImpl

@Slf4j
@Service
public class MinIOFileStorageServiceImpl implements FileStorageService {
    @Autowired
    private MinioClient minioClient;
    @Autowired
    private MinIOProperties minIOConfigProperties;
    private final static String separator = "/";
    /**
     *  上傳圖片文件
     * @param prefix  文件前綴
     * @param filename  文件名
     * @param inputStream 文件流
     * @return  文件全路徑
     */
    @Override
    public String uploadImgFile(String prefix, String filename, InputStream inputStream) {
        String filePath = builderFilePath(prefix, filename);
        try {
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .object(filePath)
                    .contentType("image/jpg")
                    .bucket(minIOConfigProperties.getBucket()).stream(inputStream,inputStream.available(),-1)
                    .build();
            minioClient.putObject(putObjectArgs);
            StringBuilder urlPath = new StringBuilder(minIOConfigProperties.getReadPath());
            urlPath.append(separator+minIOConfigProperties.getBucket());
            urlPath.append(separator);
            urlPath.append(filePath);
            return urlPath.toString();
        }catch (Exception ex){
            log.error("minio put file error.",ex);
            throw new RuntimeException("上傳文件失敗");
        }
    }
    /**
     * 刪除文件
     * @param pathUrl  文件全路徑
     */
    @Override
    public void delete(String pathUrl) {
        String key = pathUrl.replace(minIOConfigProperties.getEndpoint()+"/","");
        int index = key.indexOf(separator);
        String bucket = key.substring(0,index);
        String filePath = key.substring(index+1);
        // 刪除Objects
        RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(filePath).build();
        try {
            minioClient.removeObject(removeObjectArgs);
        } catch (Exception e) {
            log.error("minio remove file error.  pathUrl:{}",pathUrl);
            e.printStackTrace();
        }
    }
}

測試類:

@SpringBootTest
class MinioDemoApplicationTests {
    @Autowired
   private MinIOFileStorageServiceImpl minIOFileStorageServiceImpl;
    @Test
    void imageFileStorage() throws IOException {
        String fileName = UUID.randomUUID().toString().replaceAll("-", "");
        String path = minIOFileStorageServiceImpl.uploadImgFile("text", fileName, Files.newInputStream(new File("D:\\圖片\\1.jpg").toPath()));
        System.out.println(path);
    }
    @Test
    void deleteImageFile() throws IOException {
        minIOFileStorageServiceImpl.delete("");//這里填上傳的文件路徑
    }
}

完成。

到此這篇關于對象存儲服務MinIO快速入門(集成項目的詳細過程)的文章就介紹到這了,更多相關對象存儲服務MinIO內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

泗水县| 绍兴市| 颍上县| 济阳县| 安仁县| 来安县| 渭南市| 东阳市| 临漳县| 渑池县| 富源县| 集贤县| 周口市| 台北县| 手机| 鸡西市| 大化| 锦州市| 公主岭市| 苍梧县| 澄城县| 江安县| 浪卡子县| 兴仁县| 阿合奇县| 土默特右旗| 乐都县| 白河县| 西昌市| 博白县| 闵行区| 合阳县| 台安县| 永宁县| 旌德县| 黄大仙区| 峡江县| 阜新市| 菏泽市| 西城区| 台江县|