首頁 > 軟體

SpringBoot中整合Minio檔案儲存的安裝部署過程

2022-04-03 13:00:45

背景

公司的開發框架整合了附件本地儲存,阿里雲,華為雲等,現專案有要求附件儲存與應用部署環境不能是同一臺伺服器,也不能使用雲端儲存,經過技術選型後決定框架整合minio,將minio部署在另一臺伺服器開通外網埠即可解決問題

Minio安裝部署

下載minio安裝部署包,建立對應組態檔,這裡提供一個整合後的壓縮包

下載地址:http://xiazai.jb51.net/202204/yuanma/minio_jb51.rar

建立minioData資料夾作為檔案儲存路徑,解壓安裝包根據放置路徑修改對應組態檔檔案

minio-service.xml和run.bat

<service>
  <id>minio</id>
  <name>MinIO Service</name>
  <description>MinIO is a High Performance Object Storage</description>
  <logpath>D:miniologs</logpath>
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  <executable>D:miniorun.bat</executable>
</service>
set MINIO_ACCESS_KEY=admin
set MINIO_SECRET_KEY=abcd@1234
minio.exe server -address :9999 D:minioData

解壓部署包後cmd進入對應解壓路徑,輸入命令minio.exe server D:minioData 初始化後關閉cmd命令

使用服務安裝工具安裝服務,選擇minio-service.exe

windows服務安裝工具下載地址:http://xiazai.jb51.net/202204/yuanma/windowsfuwu_jb51.rar

啟動服務後存取 http://127.0.0.1:9999/

使用者名稱:admin 密碼:abcd@1234 (埠及賬戶密碼都是在run.bat檔案中設定的)

進入系統建立bucket用於儲存檔案(類似於阿里雲)

設定pom檔案

  <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>7.1.0</version>
        </dependency>

設定yml檔案

這裡分別設定上傳/下載地址是正式專案可能設定外網埠後,伺服器中不能存取對應的外網埠,上傳走內網,下載走外網

#minio設定
  # 上傳地址
  minio_uploadurl: http://192.168.1.42:9999/
  # 下載地址
  minio_downloadurl: http://192.168.1.42:9999/
  # 賬戶
  minio_accesskey: admin
  # 密碼
  minio_secrectkey: abcd@1234
  # 儲存資料夾
  minio_bucknetname: xxx

Minio工具類

初始化client

public MinioClient InitMinio() {
        MinioClient minioClient = MinioClient.builder().
        endpoint(frameConfig.getMinio_uploadurl()).       		        credentials(frameConfig.getMinio_accesskey(),frameConfig.getMinio_secrectkey()).build();
        try{
            boolean isExist = minioClient.bucketExists(frameConfig.getMinio_bucknetname());
            if (!isExist) {
                minioClient.makeBucket(frameConfig.getMinio_bucknetname());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return minioClient;
    }

上傳檔案

getkey方法只是指定對應的自定義儲存路徑

指定content-type是為了瀏覽器能開啟附件時,圖片和pdf等檔案能夠線上瀏覽

不指定預設都是stream,開啟檔案統一為下載

 public boolean uploadMinioFile(InputStream stream, AttachmentDO attachmentDO,String contentType){
        boolean result = true;
        try{
            MinioClient minioClient = InitMinio();
            String bucketName =frameConfig.getMinio_bucknetname();
            PutObjectOptions option = new PutObjectOptions(stream.available(), -1);
            option.setContentType(contentType);
            minioClient.putObject(bucketName,getKey(attachmentDO),stream,option);
        }catch (Exception e){
            logger.error("Minio上傳檔案失敗:" + e.getMessage());
            result = false;
        }
        return result;
    }

下載檔案

需要注意的是,生成的檔案下載地址是和MinioClient中指定的伺服器地址繫結的,使用nginx代理後是無效的

 public  String readMinioCommonFile(AttachmentDO attachmentDO){
        String fileurl = "";
        try{
            MinioClient minioClient = InitMinio();
            String bucketName =frameConfig.getMinio_bucknetname();
            return minioClient.presignedGetObject(bucketName, getKey(attachmentDO));
        }catch (Exception e){
            logger.error("Minio讀取檔案失敗:" + e.getMessage());
        }
        return fileurl;
    }

刪除檔案

 public  boolean deleteMinioFile(AttachmentDO attachmentDO){
        boolean result = true;
        try{
            MinioClient minioClient = InitMinio();
            String bucketName =frameConfig.getMinio_bucknetname();
            minioClient.removeObject(bucketName,getKey(attachmentDO));
        }catch (Exception e){
            logger.error("Minio刪除檔案失敗:" + e.getMessage());
            result = false;
        }
        return result;
    }

到此這篇關於SpringBoot中整合Minio檔案儲存的安裝部署過程的文章就介紹到這了,更多相關SpringBoot整合Minio檔案儲存內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com