首頁 > 軟體

minio安裝部署及使用的詳細過程

2022-09-20 22:01:16

一、伺服器安裝minio

1.進行下載

下載地址:

GNU/Linux

https://dl.min.io/server/minio/release/linux-amd64/minio

2.新建minio安裝目錄,執行如下命令

mkdir -p /home/minio/data

把二進位制檔案上傳到安裝目錄後,執行:

chmod +x minio    //給予許可權
export MINIO_ACCESS_KEY=minioadmin   //建立賬號
export MINIO_SECRET_KEY=minioadmin   //建立密碼
./minio server /home/minio/data        //啟動

 後臺啟動,並列印紀錄檔

nohup ./minio server /home/minio/data > /home/minio/data/minio.log &

預設的埠為:9000

自定義埠方式:自定義啟動埠號以及控制檯埠號,不設定則控制檯會自動設定其他埠號,非常不方便

nohup ./minio server --address :9000 --console-address :9001 /home/minio/data > /home/minio/data/minio.log &

檢視狀態

ps -ef|grep minio

二、進行存取,並設定桶

1.存取

地址:http://127.0.0.1:9000

 輸入賬號密碼後:

進行建立桶,名字自取,建立完成後伺服器home/minio/data下也會建立這個檔案目錄

 進行設定:

必須將規則設定成readwrite ,才可進行讀取檔案,否則只存或者只能讀。

 三、springboot進行實現

1.引入依賴

<!-- minio 相關依賴 -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>
<!-- thymeleaf模板引擎 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.在 application.yml 檔案中加入 MinIO 伺服器的相關資訊

# minio 檔案儲存設定資訊
minio:
  endpoint: http://127.0.0.1:9000
  accesskey: minioadmin
  secretKey: minioadmin

3.建立實體類

這一步,我們將組態檔中 minio 的設定資訊通過註解的方式注入到 MinioProp 這個實體中,方便後面我們使用

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
/**
 * minio 屬性值
 */
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
    /**
     * 連線url
     */
    private String endpoint;
    /**
     * 使用者名稱
     */
    private String accesskey;
    /**
     * 密碼
     */
    private String secretKey;
}
 

4.建立核心設定類

通過注入 MinIO 伺服器的相關設定資訊,得到 MinioClient 物件,我們上傳檔案依賴此物件

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * minio 核心設定類
 */
@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfig {
 
    @Autowired
    private MinioProp minioProp;
 
    /**
     * 獲取 MinioClient
     *
     * @return
     * @throws InvalidPortException
     * @throws InvalidEndpointException
     */
    @Bean
    public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
        return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
    }
}
 

5.上傳工具類

import com.alibaba.fastjson.JSONObject;
import com.zyxx.email.common.redis.RedisUtil;
import com.zyxx.email.utils.DateUtils;
import io.minio.MinioClient;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
 
@Slf4j
@Component
public class MinioUtils {
 
    @Autowired
    private MinioClient client;
    @Autowired
    private MinioProp minioProp;
 
    /**
     * 建立bucket
     *
     * @param bucketName bucket名稱
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
        if (!client.bucketExists(bucketName)) {
            client.makeBucket(bucketName);
        }
    }
 
    /**
     * 上傳檔案
     *
     * @param file       檔案
     * @param bucketName 儲存桶
     * @return
     */
    public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception {
        JSONObject res = new JSONObject();
        res.put("code", 0);
        // 判斷上傳檔案是否為空
        if (null == file || 0 == file.getSize()) {
            res.put("msg", "上傳檔案不能為空");
            return res;
        }
        try {
	       	// 判斷儲存桶是否存在
	        createBucket(bucketName);
	        // 檔名
	        String originalFilename = file.getOriginalFilename();
	        // 新的檔名 = 儲存桶名稱_時間戳.字尾名
	        String fileName = bucketName + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));
	        // 開始上傳
	        client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType());
	        res.put("code", 1);
	        res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);
	        return res;
		}  catch (Exception e) {
            log.error("上傳檔案失敗:{}", e.getMessage());
        }
        res.put("msg", "上傳失敗");
        return res;
    }
}
 

6.controller介面

import com.alibaba.fastjson.JSONObject;
import com.zyxx.email.common.minio.MinioUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
 
import javax.servlet.http.HttpServletRequest;
 
@Controller
public class MinioController {
 
    @Autowired
    private MinioUtils minioUtils;
 
 
    /**
     * 上傳
     *
     * @param file
     * @param request
     * @return
     */
    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) {
        JSONObject res = null;
        try {
            res = minioUtils.uploadFile(file, "product");
        } catch (Exception e) {
            e.printStackTrace();
            res.put("code", 0);
            res.put("msg", "上傳失敗");
        }
        return res.toJSONString();
    }
}
 

測試

通過網址進行存取:

PostMan進行測試上傳;

 

刪除檔案:

    //檔案刪除
    @DeleteMapping
    public String delete(String name) {
        try {
            MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
            minioClient.removeObject(BUCKETNAME, name);
        } catch (Exception e) {
            return "刪除失敗"+e.getMessage();
        }
        return "刪除成功";
    }

總結

到此這篇關於minio安裝部署及使用的文章就介紹到這了,更多相關minio安裝部署使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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