国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot整合Minio(實(shí)現(xiàn)上傳與下載)

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot整合Minio(實(shí)現(xiàn)上傳與下載)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么是MinIO?

MinIO 是一款高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng). 它是一款軟件產(chǎn)品, 可以100%的運(yùn)行在標(biāo)準(zhǔn)硬件。即X86等低成本機(jī)器也能夠很好的運(yùn)行MinIO。

根據(jù)minio依賴實(shí)現(xiàn)文件上傳下載

1.導(dǎo)入環(huán)境所需要的依賴
    
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
    <relativePath/> 
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <!--minio 8.2.2沒有報(bào)依賴異常 新版報(bào)異常-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.26</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
2.application.yml中進(jìn)行minio的配置
minio:
  endpoint: http://192.168.233.123:9000 #Minio服務(wù)所在地址
  accessKey: minioadmin                 #連接Minio用戶名
  secretKey: minioadmin                 #連接Minio密碼
  bucketName: testadmin                 #Minio數(shù)據(jù)桶名稱
3.MinIoConfig.class 配置類?

此類主要做一些連接Minio實(shí)例化對(duì)象的配置

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author: yujie.li
 * @description
 * @date 2023/7/18
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoConfig {

    /**
     * 訪問密鑰
     */
    @Value("${minio.accessKey}")
    private String accessKey;

    /**
     * 密鑰
     */
    @Value("${minio.secretKey}")
    private String secretKey;

    /**
     * 訪問api Url
     */
    @Value("${minio.endpoint}")
    private String endpoint;

    /**
     * 捅名稱
     */
    @Value("${minio.bucketName}")
    private String bucketName;

    /**
     * 創(chuàng)建MinIo客戶端
     *
     * @return
     */
    @Bean
    public MinioClient minioClient() {

        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }

}
?4.AjaxResult.class 實(shí)體類

此類對(duì)數(shù)據(jù)結(jié)果進(jìn)行封裝,返回報(bào)文

import java.util.HashMap;

/**
 * 數(shù)據(jù)結(jié)果封裝體 AjaxResult
 *
 * @author yujie.li
 */
public class AjaxResult extends HashMap<String, Object>
{
    private static final long serialVersionUID = 1L;

    /** 狀態(tài)碼 */
    public static final String CODE_TAG = "code";

    /** 返回內(nèi)容 */
    public static final String MSG_TAG = "msg";

    /** 數(shù)據(jù)對(duì)象 */
    public static final String DATA_TAG = "data";

    /**
     * 初始化一個(gè)AjaxResult 對(duì)象
     */
    public AjaxResult()
    {
    }

    /**
     * 初始化一個(gè)AjaxResult 對(duì)象
     *
     * @param code 狀態(tài)碼
     * @param msg 返回內(nèi)容
     */
    public AjaxResult(int code, String msg)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
    }

    /**
     * 初始化一個(gè)AjaxResult 對(duì)象
     *
     * @param code 狀態(tài)碼
     * @param msg 返回內(nèi)容
     * @param data 數(shù)據(jù)對(duì)象
     */
    public AjaxResult(int code, String msg, Object data)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
        if (!(data == null))
        {
            super.put(DATA_TAG, data);
        }
    }

    /**
     * 返回默認(rèn)成功消息
     *
     * @return 成功消息
     */
    public static AjaxResult success()
    {
        return AjaxResult.success("操作成功");
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回內(nèi)容
     * @return 成功消息
     */
    public static AjaxResult success(String msg)
    {
        return AjaxResult.success(msg, null);
    }

    /**
     * 返回成功數(shù)據(jù)
     * @param data 數(shù)據(jù)對(duì)象
     * @return
     */
    public static AjaxResult success(Object data)
    {
        return AjaxResult.success("操作成功", data);
    }

    /**
     * 初始化一個(gè)返回成功消息AjaxResult對(duì)象
     *
     * @param msg 返回內(nèi)容
     * @param data 數(shù)據(jù)對(duì)象
     * @return 成功消息
     */
    public static AjaxResult success(String msg, Object data)
    {
        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回默認(rèn)錯(cuò)誤消息
     *
     * @return
     */
    public static AjaxResult error()
    {
        return AjaxResult.error("操作失敗");
    }

    /**
     * 返回錯(cuò)誤消息
     *
     * @param msg 返回內(nèi)容
     * @return 警告消息
     */
    public static AjaxResult error(String msg)
    {
        return AjaxResult.error(msg, null);
    }

    /**
     * 返回錯(cuò)誤數(shù)據(jù)
     *
     * @param code 狀態(tài)碼
     * @param msg 返回內(nèi)容
     * @return 警告消息
     */
    public static AjaxResult error(int code, String msg)
    {
        return new AjaxResult(code, msg, null);
    }

    /**
     * 初始化一個(gè)返回錯(cuò)誤消息AjaxResult對(duì)象
     *
     * @param msg 返回內(nèi)容
     * @param data 數(shù)據(jù)對(duì)象
     * @return 警告消息
     */
    public static AjaxResult error(String msg, Object data)
    {
        return new AjaxResult(HttpStatus.ERROR, msg, data);
    }

}
?5.HttpStatus.class 實(shí)體類

此類對(duì)返回Http狀態(tài)碼進(jìn)行封裝

/**
 * 返回HTTP狀態(tài)碼
 *
 * @author yujie.li
 */
public class HttpStatus {
    /**
     * 操作成功
     */
    public static final int SUCCESS = 200;

    /**
     * 對(duì)象創(chuàng)建成功
     */
    public static final int CREATED = 201;

    /**
     * 請(qǐng)求已經(jīng)被接受
     */
    public static final int ACCEPTED = 202;

    /**
     * 操作已經(jīng)執(zhí)行成功,但是沒有返回?cái)?shù)據(jù)
     */
    public static final int NO_CONTENT = 204;

    /**
     * 資源已被移除
     */
    public static final int MOVED_PERM = 301;

    /**
     * 重定向
     */
    public static final int SEE_OTHER = 303;

    /**
     * 資源未被修改
     */
    public static final int NOT_MODIFIED = 304;

    /**
     * 參數(shù)列表錯(cuò)誤(缺少、格式不匹配)
     */
    public static final int BAD_REQUEST = 400;

    /**
     * 未授權(quán)
     */
    public static final int UNAUTHORIZED = 401;

    /**
     * 訪問受限,授權(quán)過期
     */
    public static final int FORBIDDEN = 403;

    /**
     * 資源,服務(wù)未找到
     */
    public static final int NOT_FOUND = 404;

    /**
     * 未被允許http方法
     */
    public static final int BAD_METHOD = 405;

    /**
     * 資源沖突,或者資源被鎖
     */
    public static final int CONFLICT = 409;

    /**
     * 不支持媒體類型數(shù)據(jù)
     */
    public static final int UNSUPPORTED_TYPE = 415;

    /**
     * 系統(tǒng)內(nèi)部錯(cuò)誤
     */
    public static final int ERROR = 500;

    /**
     * 未實(shí)現(xiàn)相應(yīng)接口
     */
    public static final int NOT_IMPLEMENTED = 501;
}
6.?ServletUtils.class 配置類

此類返回 JSON 數(shù)據(jù)的方法

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class ServletUtils {

    public static void renderString(HttpServletResponse response, String json) throws IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");

        try (PrintWriter writer = response.getWriter()) {
            writer.write(json);
            writer.flush();
        }
    }
}
7.MinIoUtil.class 工具類

?此工具類中包含上傳與下載的方法

import io.minio.GetObjectArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author: yujie.li
 * @description
 * @date 2023/7/18
 */
@Component
public class MinIOUtil {
    @Autowired
    private MinioClient minioClient;
    /**
     * 捅名稱
     */
    @Value("${minio.bucketName}")
    private String bucketName;

    /**
     * putObject上傳文件
     *
     * @param file 文件
     * @return filePath
     */
    public String putObject(MultipartFile file) throws IOException, ServerException, InsufficientDataException, InternalException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, XmlParserException, ErrorResponseException {
        //文件名
        String originalFilename = file.getOriginalFilename();
        //文件流
        InputStream inputStream = file.getInputStream();
        //文件大小
        long size = file.getSize();
        //文件路徑
        String filePath = createFilePath(originalFilename);
        System.out.println(filePath+"\t文件路徑");
        //存儲(chǔ)方法 putObject
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(bucketName)
                .object(filePath)
                .stream(inputStream, size, -1)
                .contentType(file.getContentType())
                .build());
        return filePath;
    }

    /**
     * 下載文件
     *
     * @param filePath 文件路徑
     */
    public void getObject(HttpServletResponse httpServletResponse, String filePath) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
        String fileName = getFileName(filePath);
        InputStream inputStream = minioClient.getObject(GetObjectArgs.builder()
                .bucket(bucketName)
                .object(filePath)
                .build());
        downloadFile(httpServletResponse, inputStream, fileName);
    }

    /**
     * 獲取文件路徑
     *
     * @param originalFilename 原始文件名稱
     * @return FilePath
     */
    public String createFilePath(String originalFilename) {
        return new SimpleDateFormat("yyyy/MM/dd").format(new Date()) + "/" + originalFilename;
    }

    /**
     * 根據(jù)文件路徑獲取文件名稱
     *
     * @param filePath 文件路徑
     * @return 文件名
     */
    public String getFileName(String filePath) {
        String[] split = StringUtils.split(filePath, "/");
        return split[split.length - 1];
    }

    /**
     * 下載文件
     *
     * @param httpServletResponse httpServletResponse
     * @param inputStream         inputStream
     * @param fileName            文件名
     * @throws IOException IOException
     */
    public void downloadFile(HttpServletResponse httpServletResponse, InputStream inputStream, String fileName) throws IOException {
        //設(shè)置響應(yīng)頭信息,告訴前端瀏覽器下載文件
        httpServletResponse.setContentType("application/octet-stream;charset=UTF-8");
        httpServletResponse.setCharacterEncoding("UTF-8");
        httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //獲取輸出流進(jìn)行寫入數(shù)據(jù)
        OutputStream outputStream = httpServletResponse.getOutputStream();
        // 將輸入流復(fù)制到輸出流
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        // 關(guān)閉流資源
        inputStream.close();
        outputStream.close();
    }
}
8.?MinioController.class 控制類
import com.alibaba.fastjson2.JSON;
import com.lyj.msg.AjaxResult;
import com.lyj.msg.HttpStatus;
import com.lyj.utils.MinIOUtil;
import com.lyj.utils.ServletUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author yujie.li
 * @description
 * @date 2023/7/18
 */
@RestController
@Slf4j
public class MinioController {
    @Autowired
    private MinIOUtil minioUtil;

    @PostMapping("/upload")
    public AjaxResult upload(@RequestPart MultipartFile file) {
        String filePath;
        try {
            filePath = minioUtil.putObject(file);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error("上傳失敗");
        }
        return AjaxResult.success(filePath);
    }

    @GetMapping("/download")
    public void download(HttpServletResponse response, @RequestParam(value = "filepath") String filepath) throws IOException {
        try {
            minioUtil.getObject(response, filepath);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("下載失敗", e);
            response.reset();
            AjaxResult result = new AjaxResult(HttpStatus.ERROR, e.getMessage());
            String json = JSON.toJSONString(result);
            ServletUtils.renderString(response, json);
        }
    }
}
ps.遇到的坑

1.需要將自己所創(chuàng)建的Buckets桶權(quán)限設(shè)置為public

2.桶的名稱需要與yml配置類中bucketName一致

minio springboot,spring boot,后端,java

3.?測(cè)試下載接口時(shí),傳遞的參數(shù)值為桶中的文件路徑即可,不需要在加桶的名稱,例如(testadmin/1.png)

minio springboot,spring boot,后端,java

尾注:每一行代碼 都是改變世界的能量 愿你每一次的運(yùn)行 都是發(fā)自內(nèi)心的快樂文章來源地址http://www.zghlxwxcb.cn/news/detail-723667.html

到了這里,關(guān)于SpringBoot整合Minio(實(shí)現(xiàn)上傳與下載)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot+MinIO 實(shí)現(xiàn)文件上傳、讀取、下載、刪除

    一、 MinIO 二、 MinIO安裝和啟動(dòng) 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 編寫Java業(yè)務(wù)類

    2024年02月09日
    瀏覽(44)
  • springboot實(shí)現(xiàn)minio文件分片上傳

    在Spring Boot中實(shí)現(xiàn)MinIO的文件分片上傳涉及到幾個(gè)關(guān)鍵步驟。MinIO是一個(gè)高性能的分布式對(duì)象存儲(chǔ)服務(wù),它兼容Amazon S3的API。分片上傳主要用于上傳大文件,將大文件分成多個(gè)部分,分別上傳,最后再將這些部分合并成一個(gè)完整的文件。這樣做的好處是提高了上傳的可靠性,并

    2024年01月17日
    瀏覽(24)
  • springboot實(shí)現(xiàn)文件上傳到minio

    一、前言 最近在項(xiàng)目中用的使用minio來上傳文件,因此在這里給告訴大家如何實(shí)現(xiàn) 二、實(shí)現(xiàn)文件上傳至minio 1.添加相關(guān)的maven依賴 2.minio連接配置 (1)首先配置minio屬性 (2)接著配置minio連接,代碼如下: (3)在YAML添加minio配置 3.定義minio工具類,代碼如下: 4.編寫實(shí)現(xiàn)文件

    2024年02月09日
    瀏覽(27)
  • SpringBoot + minio實(shí)現(xiàn)分片上傳、秒傳、續(xù)傳

    SpringBoot + minio實(shí)現(xiàn)分片上傳、秒傳、續(xù)傳

    MinIO是一個(gè)基于Go實(shí)現(xiàn)的高性能、兼容S3協(xié)議的對(duì)象存儲(chǔ)。它采用GNU AGPL v3開源協(xié)議,項(xiàng)目地址是https://github.com/minio/minio。 引用官網(wǎng): MinIO是根據(jù)GNU Affero通用公共許可證v3.0發(fā)布的高性能對(duì)象存儲(chǔ)。它與Amazon S3云存儲(chǔ)服務(wù)兼容。使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工

    2024年02月08日
    瀏覽(23)
  • MinIO安裝配置訪問以及SpringBoot整合MinIO

    MinIO安裝配置訪問以及SpringBoot整合MinIO

    詳細(xì)介紹了如何在CentOS7和Windows系統(tǒng)上安裝配置MinIO對(duì)象存儲(chǔ)服務(wù),并提供了SpringBoot項(xiàng)目與MinIO整合的步驟,幫助開發(fā)者快速實(shí)現(xiàn)文件的上傳、下載與管理。

    2024年02月04日
    瀏覽(20)
  • springboot整合minio

    springboot整合minio

    minio是對(duì)象存儲(chǔ)服務(wù)。 它基于Apache License 開源協(xié)議,兼容Amazon S3云存儲(chǔ)接口。適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),如圖片,音頻,視頻,日志等。對(duì)象文件最大可以達(dá)到5TB。 優(yōu)點(diǎn)有高性能,可擴(kuò)展,操作簡(jiǎn)單,有圖形化操作界面,讀寫性能優(yōu)異等。 minio的安裝也很簡(jiǎn)單,有興趣的可以去

    2024年02月07日
    瀏覽(19)
  • Minio安裝及整合SpringBoot

    Minio安裝及整合SpringBoot

    一. MinIO概述 官網(wǎng)地址:https://minio.org.cn MinIO是一款基于Apache License v2.0開源協(xié)議的分布式文件系統(tǒng)(或者叫對(duì)象存儲(chǔ)服務(wù)),可以做為云存儲(chǔ)的解決方案用來保存海量的圖片、視頻、文檔等。由于采用Golang實(shí)現(xiàn),服務(wù)端可以工作在Windows、Linux、 OS X和FreeBSD上。配置簡(jiǎn)單,基本

    2024年01月19日
    瀏覽(19)
  • SpringBoot3整合MinIO

    配套視頻:SpringBoot3整合MinIO MinIO項(xiàng)目應(yīng)用可參考視頻 【SpringBoot3+Vue3+Uniapp小程序項(xiàng)目實(shí)戰(zhàn)】 MinIO 是一個(gè)基于 Apache License v2.0 開源協(xié)議的對(duì)象存儲(chǔ)服務(wù)。它兼容亞馬遜 S3 云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器

    2024年02月21日
    瀏覽(22)
  • 【微服務(wù)】springboot整合minio詳解

    目錄 一、前言 二、Minio 概述 2.1?Minio簡(jiǎn)介 2.1?Minio特點(diǎn) 三、Minio 環(huán)境搭建

    2024年02月04日
    瀏覽(16)
  • SpringBoot整合minio服務(wù)(超詳細(xì))

    SpringBoot整合minio服務(wù)(超詳細(xì))

    創(chuàng)建一個(gè)名為public的存儲(chǔ)桶(名字可自定義),上傳文件。 通過 http://ip:9000/存儲(chǔ)桶名/文件名 訪問文件 若出現(xiàn): 可以將存儲(chǔ)桶的訪問權(quán)限設(shè)置為public. 在application.yml文件中編寫相關(guān)配置。 開發(fā)中上傳接口用得較多,其他接口可自行測(cè)試。? # npm下載element-ui npm install element-

    2024年02月08日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包