自建MinIO對象存儲服務


最近買了一個服務器,但沒有買OSS,所以想着自己在服務器建立oss。

MinIO 是一款基於Go語言的高性能對象存儲服務,在Github上已有19K+Star。它采用了Apache License v2.0開源協議,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等。

 

MinIO安裝

使用docker安裝,docker的安裝就不說了,我之前也有寫。

下載MinIO的Docker鏡像:

docker pull minio/minio

在Docker容器中運行MinIO

docker run -p 9090:9000 --name minio \
  -v /mydata/minio/data:/data \
  -v /mydata/minio/config:/root/.minio \
  -d minio/minio server /data

這里我們將MiniIO的數據和配置文件夾掛在到宿主機上。

訪問 http://192.168.6.132:9090 

 

默認Access Key和Secret都是minioadmin

 

 創建一個bucket

修改訪問策略為只讀

 

 需要注意的是,訪問前綴需要設置為*.*,否則會無法訪問;

 

 

 然后我們整合到項目中去。

整合使用

引入依賴

<!--MinIO JAVA SDK-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>

在SpringBoot中開啟文件上傳功能

spring:
  servlet:
    multipart:
      enabled: true #開啟文件上傳
      max-file-size: 10MB #限制文件上傳大小為10M

默認是1mb。

一個文件上傳的接口:

 
         
@Value("${minio.endpoint}")
private String ENDPOINT;
@Value("${minio.bucketName}")
private String BUCKET_NAME;
@Value("${minio.accessKey}")
private String ACCESS_KEY;
@Value("${minio.secretKey}")
private String SECRET_KEY;
    
@PreAuthorize("hasAuthority('music:add')") @ApiOperation("添加歌曲") @PostMapping("uploadMusic") public CommonResult uploadMusic(@RequestParam("file") MultipartFile file, @ModelAttribute Music music){ try { // 創建一個MinIO的Java客戶端 MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY); boolean isExist = minioClient.bucketExists(BUCKET_NAME); if (isExist) { LOGGER.info("存儲桶已經存在!"); } else { //創建存儲桶並設置只讀權限 minioClient.makeBucket(BUCKET_NAME); minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY); } String fileName = file.getOriginalFilename(); if(fileName == null){ return CommonResult.failed("歌曲名為空"); } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); // 設置存儲對象名稱 String objectName = sdf.format(new Date()) + "/" + fileName; minioClient.putObject(BUCKET_NAME, objectName, file.getInputStream(), file.getContentType()); Music music1 = new Music(); music1.setMusicName(music.getMusicName()); music1.setMusicUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName); music1.setSingerName(music.getSingerName()); musicService.insert(music1); LOGGER.info("上傳歌曲路徑:" + ENDPOINT + "/" + BUCKET_NAME + "/" + objectName); } catch (Exception e) { LOGGER.info("上傳發生錯誤: {}!", e.getMessage()); e.printStackTrace(); } return CommonResult.success(null); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM