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

Docker安裝Minio+SpringBoot上傳下載文件方式

 更新時間:2024年10月31日 14:49:59   作者:Xiao_zuo_ya  
本文主要介紹了如何通過Docker安裝Minio并進行訪問測試,同時也講解了如何在SpringBoot中上傳文件到Minio,內(nèi)容包含了pom文件引入依賴,application.properties配置,Minio配置,MinioClinet,FileService,FileServiceImpl的配置

Docker安裝Minio

docker pull minio/minio
docker images
REPOSITORY    TAG       IMAGE ID       CREATED      SIZE
minio/minio   latest    162489e21d26   7 days ago   165MB
nginx         latest    7f553e8bbc89   7 days ago   192MB
# 外掛磁盤存儲使用
mkdir -p /usr/local/minio/data
# 外掛配置文件使用
mkdir -p /usr/local/minio/config
# 創(chuàng)建minio 容器
docker run -d   --name minio   -p 9000:9000   -p 9001:9001   -v /usr/local/minio/data:/data   -v /usr/local/minio/config:/root/.minio   -e MINIO_ROOT_USER=admin   -e MINIO_ROOT_PASSWO
RD=admin   minio/minio server /data --console-address ":9001"
# 創(chuàng)建失敗
docker logs minio
FATAL Unable to validate credentials inherited from the shell environment: Invalid credentials
      > Please provide correct credentials
      HINT:
        MINIO_ROOT_USER length should be at least 3, and MINIO_ROOT_PASSWORD length at least 8 characters
# 密碼不能少于8個字符
docker rm minio
docker run -d   --name minio   -p 9000:9000   -p 9001:9001   -v /usr/local/minio/data:/data   -v /usr/local/minio/config:/root/.minio   -e MINIO_ROOT_USER=admin   -e MINIO_ROOT_PASSWO
RD=admin123   minio/minio server /data --console-address ":9001"
# 防火墻開放端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9001/tcp --permanent
# 重啟防火墻
sudo firewall-cmd --reload

訪問測試

http://ip:9001

SpringBoot上傳文件到Minio

pom文件引入依賴

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

application.properties配置Minio

spring.minio.access-key=pNehtjUDw9ENBlULVTGT
spring.minio.secret-key=p3yVngZ2Ei1uCtn6vKozrof6ICB7GFBiYPr5RAWW
spring.minio.endpoint=http://192.168.10.227:9000

配置MinioClinet

@Data
@Configuration
@ConfigurationProperties(prefix = "spring.minio")
@Slf4j
public class MinioConfig {

    private String accessKey;
    private String secretKey;
    private String endpoint;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                  .endpoint(endpoint)
                  .credentials(accessKey, secretKey)
                  .build();
    }
}

FileService

public interface FileService {

    /**
     * 是否存在桶
     */
    Boolean bucketExists(String bucketName);

    /**
     * 創(chuàng)建桶
     */
    void makeBucket(String bucketName);

    /**
     * 刪除桶
     */
    void removeBucket(String bucketName);

    /**
     * 獲取當所有桶
     */
    List<Bucket> getAllBuckets();

    /**
     *  上傳文件
     */
    String uploadFile(String bucketName, String prefix, MultipartFile file) throws Exception;

    /**
     * 文件預(yù)覽
     */
    String preview(String bucketName, String prefix, String fileName) throws Exception;

    /**
     * 文件下載
     */
    void download(String bucketName, String prefix, String fileName, HttpServletResponse res);

    /**
     * 刪除文件
     */
    Boolean removeFile(String bucketName, String prefix, String fileName);

    /**
     * 文件是否存在
     */
    boolean isFileExists(String bucketName, String prefix, String fileName) throws Exception;

    /**
     * 生成一個帶到期時間、簽名的URL,這個地址可以提供給沒有登錄的第三方共享訪問或者上傳對象,針對于Bucket為私有的情況
     */
    String getPresignedObjectUrl(String bucketName, String prefix, String fileName);
}

FileServiceImpl

package com.example.demo.service.impl;

import java.util.List;
import java.util.Objects;
import java.util.UUID;
import javax.servlet.http.HttpServletResponse;

import cn.hutool.core.io.file.FileNameUtil;
import com.example.demo.service.FileService;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author :王建
 * @since :2024-10-10 11:38
 */
@Service
@Slf4j
public class FileServiceImpl implements FileService {

    @Autowired
    private MinioClient minioClient;

    @Override
    public Boolean bucketExists(String bucketName) {
        try {
            return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void makeBucket(String bucketName) {
        try {
            minioClient.makeBucket(MakeBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void removeBucket(String bucketName) {
        try {
            minioClient.removeBucket(RemoveBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public List<Bucket> getAllBuckets() {
        try {
            return minioClient.listBuckets();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public String uploadFile(String bucketName, String prefix, MultipartFile file) throws Exception {
        String uuid = UUID.randomUUID().toString();
        // 重新命名原來文件
        String fileName = uuid + "." + FileNameUtil.extName(file.getOriginalFilename());
        log.info("源文件名稱:{},重命名后文件名稱:{}", file.getOriginalFilename(), fileName);
        String objectName = StringUtils.isBlank(prefix) ? fileName : "/" + prefix + "/" + fileName;
        PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(objectName)
                .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
        minioClient.putObject(objectArgs);
        return uuid;
    }

    @Override
    public String preview(String bucketName, String prefix, String fileName) throws Exception {
        // 查看文件地址
        String objectName = StringUtils.isBlank(prefix) ? fileName : "/" + prefix + "/" + fileName;
        GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).method(Method.GET).build();
        return minioClient.getPresignedObjectUrl(build);
    }

    @Override
    public void download(String bucketName, String prefix, String fileName, HttpServletResponse res) {

    }

    @Override
    public Boolean removeFile(String bucketName, String prefix, String fileName) {
        return null;
    }

    @Override
    public boolean isFileExists(String bucketName, String prefix, String fileName) throws Exception {
        String objectName = StringUtils.isBlank(prefix) ? fileName : "/" + prefix + "/" + fileName;
        StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
        return !Objects.isNull(statObjectResponse);
    }

    @Override
    public String getPresignedObjectUrl(String bucketName, String prefix, String fileName) {
        return null;
    }
}

配置Minio允許直接預(yù)覽PDF文件

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • docker安裝postgresql的圖文教程

    docker安裝postgresql的圖文教程

    PostgreSQL也稱為?Postgres,是領(lǐng)先的對象關(guān)系數(shù)據(jù)庫系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于docker安裝postgresql的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Docker?Desktop?啟用?Kubernetes?失敗后處理方案

    Docker?Desktop?啟用?Kubernetes?失敗后處理方案

    ?在setting -> Kubernetes 中,選中 Enable Kubernetes 后,長時間顯示 Starting ...? ,在Images中顯示幾個自動下載的鏡像后,顯示 Start Kubernetes failed,這篇文章主要介紹了Docker?Desktop啟用Kubernetes失敗后處理方法,需要的朋友可以參考下
    2023-08-08
  • docker-compose 詳解及示例代碼

    docker-compose 詳解及示例代碼

    這篇文章主要介紹了docker-compose 詳解的相關(guān)資料,并附簡單實例,需要的朋友可以參考下
    2016-10-10
  • 使用Docker構(gòu)建開發(fā)環(huán)境的方法步驟(?Windows和mac)

    使用Docker構(gòu)建開發(fā)環(huán)境的方法步驟(?Windows和mac)

    利用Docker,我們可以做很多事情。所以本文就詳細介紹了使用Docker構(gòu)建開發(fā)環(huán)境的方法步驟,分為?Windows和mac版本,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • docker中mysql初始化及啟動失敗問題解決方案

    docker中mysql初始化及啟動失敗問題解決方案

    這篇文章主要介紹了docker中mysql初始化及啟動失敗問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • docker利用dockerfile構(gòu)建鏡像

    docker利用dockerfile構(gòu)建鏡像

    dockerfile是一種用于定義和構(gòu)建docker鏡像的文本文件,由一行行指令和參數(shù)組成,用于描述鏡像的構(gòu)建和配置過程;由基礎(chǔ)映像、軟件包安裝、文件拷貝、環(huán)境變量設(shè)置等組成
    2024-10-10
  • Docker實踐之搭建wordpress的方法

    Docker實踐之搭建wordpress的方法

    這篇文章主要介紹了Docker實踐之搭建wordpress的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Docker 教程之獲取鏡像基礎(chǔ)知識詳解

    Docker 教程之獲取鏡像基礎(chǔ)知識詳解

    這篇文章主要介紹了Docker 教程之獲取鏡像詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Docker-compose 建立ELK集群的實現(xiàn)方法

    Docker-compose 建立ELK集群的實現(xiàn)方法

    這篇文章主要介紹了Docker-compose 建立ELK集群的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Docker下mysql設(shè)置字符集的方法

    Docker下mysql設(shè)置字符集的方法

    這篇文章主要介紹了Docker下的mysql設(shè)置字符集的方法,需要的朋友可以參考下
    2018-03-03

最新評論

惠安县| 仙居县| 石城县| 宣城市| 赞皇县| 花莲县| 肇州县| 成都市| 桐乡市| 道孚县| 三台县| 宁夏| 南靖县| 革吉县| 通城县| 榆林市| 内乡县| 醴陵市| 大英县| 定陶县| 柳州市| 万源市| 赤水市| 探索| 乐亭县| 鄂尔多斯市| 都江堰市| 永安市| 城步| 云龙县| 凤凰县| 进贤县| 祥云县| 濮阳市| 深水埗区| 金沙县| 莱州市| 康马县| 张北县| 桂东县| 佛坪县|