spring boot整合minio,7版本和8版本的

1、添加依赖
1.1、7版本的

<dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>7.0.2</version>
        </dependency>
注:2.7版本要添加如下依赖,一定要放在minio依赖的前面
<dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.0</version>
        </dependency>

1.2、8版本则用如下依赖

<dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>com.squareup.okhttp3</groupId>
                    <artifactId>okhttp</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.11.0</version>
        </dependency>

2、配置文件连接minio配置

minio.url=http://localhost:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucketName=xxxxx

3、minio配置类
7版本的如下

package com.iot.zmtestboot.minio;

import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.Result;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;

@Component
@RequiredArgsConstructor
public class MinioTemplate implements InitializingBean {
    /**
     * minio地址+端口号
     */
    @Value("${minio.url}")
    private  String url;
    /**
     * minio用户名
     */
    @Value("${minio.accessKey}")
    private  String accessKey;
    /**
     * minio密码
     */
    @Value("${minio.secretKey}")
    private  String secretKey;
    /**
     * 文件桶的名称
     */
    @Value("${minio.bucketName}")
    private String bucketName;

    private MinioClient minioClient;

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.hasText(url, "Minio url 为空");
        Assert.hasText(accessKey, "Minio accessKey为空");
        Assert.hasText(secretKey, "Minio secretKey为空");
        this.minioClient = new MinioClient(url, accessKey, secretKey);
    }

    /**
     * 创建bucket
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
        if (!minioClient.bucketExists(bucketName)) {
            minioClient.makeBucket(bucketName);
        }
    }

    /**
     * 获取全部bucket
     * <p>
     * https://docs.minio.io/cn/java-client-api-reference.html#listBuckets
     */
    @SneakyThrows
    public List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
    }

    /**
     * 根据bucketName获取信息
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public Optional<Bucket> getBucket(String bucketName) {
        return minioClient.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();
    }

    /**
     * 根据bucketName删除信息
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void removeBucket(String bucketName) {
        minioClient.removeBucket(bucketName);
    }

    /**
     * 根据文件前置查询文件
     *
     * @param bucketName bucket名称
     * @param prefix     前缀
     * @param recursive  是否递归查询
     * @return MinioItem 列表
     */
    @SneakyThrows
    public List getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) {
        List<Item> list = new ArrayList<>();
        Iterable<Result<Item>> objectsIterator = minioClient.listObjects(bucketName, prefix, recursive);
        if (objectsIterator != null) {
            Iterator<Result<Item>> iterator = objectsIterator.iterator();
            if (iterator != null) {
                while (iterator.hasNext()) {
                    Result<Item> result = iterator.next();
                    Item item = result.get();
                    list.add(item);
                }
            }
        }

        return list;
    }

    /**
     * 获取文件外链
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param expires    过期时间 <=7
     * @return url
     */
    @SneakyThrows
    public String getObjectURL(String bucketName, String objectName, Integer expires) {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.presignedGetObject(bucketName, objectName, expires);
//        return minioClient.presignedGetObject(bucketName, objectName);
    }

//    /**
//     * 获取文件路径
//     * @param bucketName
//     * @param fileName
//     * @return
//     */
//    @SneakyThrows
//    public String getObjectLocal(String bucketName, String fileName) {
//        if (bucketName!="") {
//            bucketName = this.bucketName;
//        }
//        return minioClient.getObjectUrl(bucketName, fileName);
//    }



    /**
     * 获取文件
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @return 二进制流
     */
    @SneakyThrows
    public InputStream getObject(String bucketName, String objectName) {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.getObject(bucketName, objectName);
    }

    /**
     * 获取文件
     * @param bucketName
     * @param objectName
     * @return
     */
    @SneakyThrows
    public ObjectStat statObject(String bucketName, String objectName) {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.statObject(bucketName, objectName);
    }

    /**
     * 上传文件
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param stream     文件流
     * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject
     */
    public void putObject(String bucketName, String objectName,InputStream stream,int length,String suffix) throws Exception {
        String contentType="application/octet-stream";
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        //判断桶是否存在
        boolean isExist = minioClient.bucketExists(bucketName);
        if(isExist) {
            System.out.println("Bucket already exists.");
        } else {
            // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
            createBucket(bucketName);
        }
        if(suffix.equals("jpg") || suffix.equals("JPG")){
            contentType="image/jpg";
        }
        else if(suffix.equals("png") || suffix.equals("PNG")){
            contentType="image/png";
        }
        else if(suffix.equals("jpeg") || suffix.equals("JPEG")){
            contentType="image/jpeg";
        }
        else if(suffix.equals("svg") || suffix.equals("SVG")){
            contentType="image/svg";
        }
        else if(suffix.equals("gif") || suffix.equals("GIF")){
            contentType="image/gif";
        }
        PutObjectOptions filePutObjectOptions= new PutObjectOptions(stream.available(), length);
        filePutObjectOptions.setContentType(contentType);
        minioClient.putObject(bucketName, objectName, stream, filePutObjectOptions);
    }

    /**
     * 获取文件信息, 如果抛出异常则说明文件不存在
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject
     */
    public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.statObject(bucketName, objectName);
    }

    /**
     * 删除文件
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject
     */
    public void removeObject(String bucketName, String objectName) throws Exception {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        minioClient.removeObject(bucketName, objectName);
    }
}

如果是8版本的

package com.example.answer_system.config;

import com.example.answer_system.utils.BusinessException;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;

@Component
@RequiredArgsConstructor
@Slf4j
public class MinioTemplate implements InitializingBean {
    /**
     * minio地址+端口号
     */
    @Value("${minio.url}")
    private  String url;
    /**
     * minio用户名
     */
    @Value("${minio.accessKey}")
    private  String accessKey;
    /**
     * minio密码
     */
    @Value("${minio.secretKey}")
    private  String secretKey;
    /**
     * 文件桶的名称
     */
    @Value("${minio.bucketName}")
    private String bucketName;

    private MinioClient minioClient;

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.hasText(url, "Minio url 为空");
        Assert.hasText(accessKey, "Minio accessKey为空");
        Assert.hasText(secretKey, "Minio secretKey为空");
//        this.minioClient = new MinioClient(url, accessKey, secretKey);
        this.minioClient = MinioClient.builder().endpoint(url).credentials(accessKey,secretKey).build();
    }

    /**
     * 创建bucket
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
//        if (!minioClient.bucketExists(bucketName)) {
//            minioClient.makeBucket(bucketName);
//        }
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
    }

    /**
     * 获取全部bucket
     * <p>
     * https://docs.minio.io/cn/java-client-api-reference.html#listBuckets
     */
    @SneakyThrows
    public List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
    }

    /**
     * 根据bucketName获取信息
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public Optional<Bucket> getBucket(String bucketName) {
        return minioClient.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();
    }

    /**
     * 根据bucketName删除信息
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void removeBucket(String bucketName) {
        minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
    }

    /**
     * 根据文件前置查询文件
     *
     * @param bucketName bucket名称
     * @param prefix     前缀
     * @param recursive  是否递归查询
     * @return MinioItem 列表
     */
    @SneakyThrows
    public List getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) {
        List<Item> list = new ArrayList<>();
        ListObjectsArgs listObjectsArgs=
                ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).recursive(recursive).build();
        Iterable<Result<Item>> objectsIterator = minioClient.listObjects(listObjectsArgs);
//        Iterable<Result<Item>> objectsIterator = minioClient.listObjects(bucketName, prefix, recursive);
        if (objectsIterator != null) {
            Iterator<Result<Item>> iterator = objectsIterator.iterator();
            if (iterator != null) {
                while (iterator.hasNext()) {
                    Result<Item> result = iterator.next();
                    Item item = result.get();
                    list.add(item);
                }
            }
        }

        return list;
    }

    /**
     * 获取文件外链
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param expires    过期时间 <=7
     * @return url
     */
    @SneakyThrows
    public String getObjectURL(String bucketName, String objectName, Integer expires) {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        GetPresignedObjectUrlArgs getPresignedObjectUrlArgs=
                GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).expiry(expires).build();
        return minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
        //return minioClient.presignedGetObject(bucketName, objectName, expires);
//        return minioClient.presignedGetObject(bucketName, objectName);
    }

//    /**
//     * 获取文件路径
//     * @param bucketName
//     * @param fileName
//     * @return
//     */
//    @SneakyThrows
//    public String getObjectLocal(String bucketName, String fileName) {
//        if (bucketName!="") {
//            bucketName = this.bucketName;
//        }
//        return minioClient.getObjectUrl(bucketName, fileName);
//    }



    /**
     * 获取文件
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @return 二进制流
     */
    @SneakyThrows
    public InputStream getObject(String bucketName, String objectName) {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
        //return minioClient.getObject(bucketName, objectName);
    }

    /**
     * 获取文件
     * @param bucketName
     * @param objectName
     * @return
     */
    @SneakyThrows
    public StatObjectResponse statObject(String bucketName, String objectName) {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
//        return minioClient.statObject(bucketName, objectName);
    }

    /**
     * 上传文件
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param stream     文件流
     * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject
     */
    public void putObject(String bucketName, String objectName,InputStream stream,int length,String suffix) throws Exception {
        String contentType="application/octet-stream";
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        //判断桶是否存在
        boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        if(isExist) {
            System.out.println("Bucket already exists.");
        } else {
            // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
            createBucket(bucketName);
        }
        if(suffix.equals("jpg") || suffix.equals("JPG")){
            contentType="image/jpg";
        }
        else if(suffix.equals("png") || suffix.equals("PNG")){
            contentType="image/png";
        }
        else if(suffix.equals("jpeg") || suffix.equals("JPEG")){
            contentType="image/jpeg";
        }
        else if(suffix.equals("svg") || suffix.equals("SVG")){
            contentType="image/svg";
        }
        else if(suffix.equals("gif") || suffix.equals("GIF")){
            contentType="image/gif";
        }
//        PutObjectOptions filePutObjectOptions= new PutObjectOptions(stream.available(), length);
//        filePutObjectOptions.setContentType(contentType);
        PutObjectArgs putObjectArgs=PutObjectArgs.builder()
                .bucket(bucketName)
                .object(objectName)
                .stream(stream,stream.available(), length)
                .contentType(contentType).build();
        minioClient.putObject(putObjectArgs);
//        minioClient.putObject(bucketName, objectName, stream, filePutObjectOptions);
    }

    /**
     * 获取文件信息, 如果抛出异常则说明文件不存在
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject
     */
    public StatObjectResponse getObjectInfo(String bucketName, String objectName) throws Exception {
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
        //return minioClient.statObject(bucketName, objectName);
    }

    /**
     * 删除文件
     *
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject
     */
    public void removeObject(String bucketName, String objectName){
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        try {
            minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
//            minioClient.removeObject(bucketName, objectName);
        }catch (Exception ex){
            ex.printStackTrace();
            throw new BusinessException("删除失败");
        }
    }

    public void removeObjects(String bucketName, List<String> objectNames){
        if (bucketName.equals("")) {
            bucketName = this.bucketName;
        }
        try {
            //要删除的对象
            List<DeleteObject> deleteObjects=objectNames.stream().map(v->new DeleteObject(v)).collect(Collectors.toList());
            Iterable<Result<DeleteError>> results=minioClient.removeObjects(
                    RemoveObjectsArgs.builder()
                            .bucket(bucketName)
                            .objects(deleteObjects)
                            .build()
            );
            for (Result<DeleteError> result : results) {
                DeleteError error = result.get();
                log.warn("Error in deleting object " + error.objectName() + "; " + error.message());
            }
        }catch (Exception ex){
            ex.printStackTrace();
            throw new BusinessException("删除失败");
        }

    }

}

4、controller编写

package com.iot.zmtestboot.controller;

import com.google.common.io.CharStreams;
import com.iot.zmtestboot.minio.MinioTemplate;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

@RestController
@CrossOrigin
@RequestMapping("/iot")
public class MinioController {
    @Autowired
    private MinioTemplate minioTemplate;

    @ApiOperation(value = "上传文件")
    @PostMapping(value = "/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws Exception {
        System.out.println("上传文件");
        if (file.isEmpty()) {
            return "上传文件不能为空";
        } else {
            // 得到文件流
            InputStream is = file.getInputStream();
            // 文件名
            String fileName = file.getOriginalFilename();
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            // 把文件放到minio的boots桶里面
            minioTemplate.putObject("",fileName,is,-1,suffix);
            // 关闭输入流
            is.close();
            return "上传成功!";
        }
    }

    @ApiOperation(value = "删除文件")
    @DeleteMapping(value = "/delete")
    @SneakyThrows(Exception.class)
    public String delete(@RequestParam("fileName") String fileName) {
        minioTemplate.removeObject("",fileName);
        return "删除成功";
    }

    @ApiOperation(value = "获取文件url预览")
    @GetMapping(value = "/getFileUrl")
    public String getFileUrl(String objectName){
        return minioTemplate.getObjectURL("",objectName,60 * 60 * 24);
    }


    @ApiOperation(value = "获取文件流")
    @GetMapping(value = "/uploadFile")
    public byte[] uploadFile(String objectName) throws IOException {
        InputStream uploadFile=minioTemplate.getObject("",objectName);
        //流转字节码数组
        //byte[] bytes = uploadFile.readAllBytes();\
        //return bytes;
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[16384];
        while ((nRead = uploadFile.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }
        return buffer.toByteArray();

    }
}

5、如果有文件需要在线预览,需要设置contentType

{
  ".*": "application/octet-stream",
  ".001": "application/x-001",
  ".301": "application/x-301",
  ".323": "text/h323",
  ".906": "application/x-906",
  ".907": "drawing/907",
  ".a11": "application/x-a11",
  ".acp": "audio/x-mei-aac",
  ".ai": "application/postscript",
  ".aif": "audio/aiff",
  ".aifc": "audio/aiff",
  ".aiff": "audio/aiff",
  ".anv": "application/x-anv",
  ".asa": "text/asa",
  ".asf": "video/x-ms-asf",
  ".asp": "text/asp",
  ".asx": "video/x-ms-asf",
  ".au": "audio/basic",
  ".avi": "video/avi",
  ".awf": "application/vnd.adobe.workflow",
  ".biz": "text/xml",
  ".bmp": "application/x-bmp",
  ".bot": "application/x-bot",
  ".c4t": "application/x-c4t",
  ".c90": "application/x-c90",
  ".cal": "application/x-cals",
  ".cat": "application/s-pki.seccat",
  ".cdf": "application/x-netcdf",
  ".cdr": "application/x-cdr",
  ".cel": "application/x-cel",
  ".cer": "application/x-x509-ca-cert",
  ".cg4": "application/x-g4",
  ".cgm": "application/x-cgm",
  ".cit": "application/x-cit",
  ".class": "java/*",
  ".cml": "text/xml",
  ".cmp": "application/x-cmp",
  ".cmx": "application/x-cmx",
  ".cot": "application/x-cot",
  ".crl": "application/pkix-crl",
  ".crt": "application/x-x509-ca-cert",
  ".csi": "application/x-csi",
  ".css": "text/css",
  ".cut": "application/x-cut",
  ".dbf": "application/x-dbf",
  ".dbm": "application/x-dbm",
  ".dbx": "application/x-dbx",
  ".dcd": "text/xml",
  ".dcx": "application/x-dcx",
  ".der": "application/x-x509-ca-cert",
  ".dgn": "application/x-dgn",
  ".dib": "application/x-dib",
  ".dll": "application/x-msdownload",
  ".doc": "application/msword",
  ".dot": "application/msword",
  ".drw": "application/x-drw",
  ".dtd": "text/xml",
  ".dwf": "Model/vnd.dwf",
  ".dwg": "application/x-dwg",
  ".dxb": "application/x-dxb",
  ".dxf": "application/x-dxf",
  ".edn": "application/vnd.adobe.edn",
  ".emf": "application/x-emf",
  ".eml": "message/rfc822",
  ".ent": "text/xml",
  ".epi": "application/x-epi",
  ".eps": "application/x-ps",
  ".etd": "application/x-ebx",
  ".exe": "application/x-msdownload",
  ".fax": "image/fax",
  ".fdf": "application/vnd.fdf",
  ".fif": "application/fractals",
  ".fo": "text/xml",
  ".frm": "application/x-frm",
  ".g4": "application/x-g4",
  ".gbr": "application/x-gbr",
  ".gcd": "application/x-gcd",
  ".gif": "image/gif",
  ".gl2": "application/x-gl2",
  ".gp4": "application/x-gp4",
  ".hgl": "application/x-hgl",
  ".hmr": "application/x-hmr",
  ".hpg": "application/x-hpgl",
  ".hpl": "application/x-hpl",
  ".hqx": "application/mac-binhex40",
  ".hrf": "application/x-hrf",
  ".hta": "application/hta",
  ".htc": "text/x-component",
  ".htm": "text/html",
  ".html": "text/html",
  ".htt": "text/webviewhtml",
  ".htx": "text/html",
  ".icb": "application/x-icb",
  ".ico": "image/x-icon",
  ".iff": "application/x-iff",
  ".ig4": "application/x-g4",
  ".igs": "application/x-igs",
  ".iii": "application/x-iphone",
  ".img": "application/x-img",
  ".ins": "application/x-internet-signup",
  ".isp": "application/x-internet-signup",
  ".IVF": "video/x-ivf",
  ".java": "java/*",
  ".jfif": "image/jpeg",
  ".jpe": "image/jpeg",
  ".jpeg": "image/jpeg",
  ".jpg": "image/jpeg",
  ".js": "application/x-javascript",
  ".jsp": "text/html",
  ".la1": "audio/x-liquid-file",
  ".lar": "application/x-laplayer-reg",
  ".latex": "application/x-latex",
  ".lavs": "audio/x-liquid-secure",
  ".lbm": "application/x-lbm",
  ".lmsff": "audio/x-la-lms",
  ".ls": "application/x-javascript",
  ".ltr": "application/x-ltr",
  ".m1v": "video/x-mpeg",
  ".m2v": "video/x-mpeg",
  ".m3u": "audio/mpegurl",
  ".m4e": "video/mpeg4",
  ".mac": "application/x-mac",
  ".man": "application/x-troff-man",
  ".math": "text/xml",
  ".mdb": "application/x-mdb",
  ".mfp": "application/x-shockwave-flash",
  ".mht": "message/rfc822",
  ".mhtml": "message/rfc822",
  ".mi": "application/x-mi",
  ".mid": "audio/mid",
  ".midi": "audio/mid",
  ".mil": "application/x-mil",
  ".mml": "text/xml",
  ".mnd": "audio/x-musicnet-download",
  ".mns": "audio/x-musicnet-stream",
  ".mocha": "application/x-javascript",
  ".movie": "video/x-sgi-movie",
  ".mp1": "audio/mp1",
  ".mp2": "audio/mp2",
  ".mp2v": "video/mpeg",
  ".mp3": "audio/mp3",
  ".mp4": "video/mp4",
  ".mpa": "video/x-mpg",
  ".mpd": "application/-project",
  ".mpe": "video/x-mpeg",
  ".mpeg": "video/mpg",
  ".mpg": "video/mpg",
  ".mpga": "audio/rn-mpeg",
  ".mpp": "application/-project",
  ".mps": "video/x-mpeg",
  ".mpt": "application/-project",
  ".mpv": "video/mpg",
  ".mpv2": "video/mpeg",
  ".mpw": "application/s-project",
  ".mpx": "application/-project",
  ".mtx": "text/xml",
  ".mxp": "application/x-mmxp",
  ".net": "image/pnetvue",
  ".nrf": "application/x-nrf",
  ".nws": "message/rfc822",
  ".odc": "text/x-ms-odc",
  ".out": "application/x-out",
  ".p10": "application/pkcs10",
  ".p12": "application/x-pkcs12",
  ".p7b": "application/x-pkcs7-certificates",
  ".p7c": "application/pkcs7-mime",
  ".p7m": "application/pkcs7-mime",
  ".p7r": "application/x-pkcs7-certreqresp",
  ".p7s": "application/pkcs7-signature",
  ".pc5": "application/x-pc5",
  ".pci": "application/x-pci",
  ".pcl": "application/x-pcl",
  ".pcx": "application/x-pcx",
  ".pdf": "application/pdf",
  ".pdx": "application/vnd.adobe.pdx",
  ".pfx": "application/x-pkcs12",
  ".pgl": "application/x-pgl",
  ".pic": "application/x-pic",
  ".pko": "application-pki.pko",
  ".pl": "application/x-perl",
  ".plg": "text/html",
  ".pls": "audio/scpls",
  ".plt": "application/x-plt",
  ".png": "image/png",
  ".pot": "applications-powerpoint",
  ".ppa": "application/vs-powerpoint",
  ".ppm": "application/x-ppm",
  ".pps": "application-powerpoint",
  ".ppt": "applications-powerpoint",
  ".pr": "application/x-pr",
  ".prf": "application/pics-rules",
  ".prn": "application/x-prn",
  ".prt": "application/x-prt",
  ".ps": "application/postscript",
  ".ptn": "application/x-ptn",
  ".pwz": "application/powerpoint",
  ".r3t": "text/vnd.rn-realtext3d",
  ".ra": "audio/vnd.rn-realaudio",
  ".ram": "audio/x-pn-realaudio",
  ".ras": "application/x-ras",
  ".rat": "application/rat-file",
  ".rdf": "text/xml",
  ".rec": "application/vnd.rn-recording",
  ".red": "application/x-red",
  ".rgb": "application/x-rgb",
  ".rjs": "application/vnd.rn-realsystem-rjs",
  ".rjt": "application/vnd.rn-realsystem-rjt",
  ".rlc": "application/x-rlc",
  ".rle": "application/x-rle",
  ".rm": "application/vnd.rn-realmedia",
  ".rmf": "application/vnd.adobe.rmf",
  ".rmi": "audio/mid",
  ".rmj": "application/vnd.rn-realsystem-rmj",
  ".rmm": "audio/x-pn-realaudio",
  ".rmp": "application/vnd.rn-rn_music_package",
  ".rms": "application/vnd.rn-realmedia-secure",
  ".rmvb": "application/vnd.rn-realmedia-vbr",
  ".rmx": "application/vnd.rn-realsystem-rmx",
  ".rnx": "application/vnd.rn-realplayer",
  ".rp": "image/vnd.rn-realpix",
  ".rpm": "audio/x-pn-realaudio-plugin",
  ".rsml": "application/vnd.rn-rsml",
  ".rt": "text/vnd.rn-realtext",
  ".rtf": "application/x-rtf",
  ".rv": "video/vnd.rn-realvideo",
  ".sam": "application/x-sam",
  ".sat": "application/x-sat",
  ".sdp": "application/sdp",
  ".sdw": "application/x-sdw",
  ".sit": "application/x-stuffit",
  ".slb": "application/x-slb",
  ".sld": "application/x-sld",
  ".slk": "drawing/x-slk",
  ".smi": "application/smil",
  ".smil": "application/smil",
  ".smk": "application/x-smk",
  ".snd": "audio/basic",
  ".sol": "text/plain",
  ".sor": "text/plain",
  ".spc": "application/x-pkcs7-certificates",
  ".spl": "application/futuresplash",
  ".spp": "text/xml",
  ".ssm": "application/streamingmedia",
  ".sst": "application-pki.certstore",
  ".stl": "application/-pki.stl",
  ".stm": "text/html",
  ".sty": "application/x-sty",
  ".svg": "text/xml",
  ".swf": "application/x-shockwave-flash",
  ".tdf": "application/x-tdf",
  ".tg4": "application/x-tg4",
  ".tga": "application/x-tga",
  ".tif": "image/tiff",
  ".tiff": "image/tiff",
  ".tld": "text/xml",
  ".top": "drawing/x-top",
  ".torrent": "application/x-bittorrent",
  ".tsd": "text/xml",
  ".txt": "text/plain",
  ".uin": "application/x-icq",
  ".uls": "text/iuls",
  ".vcf": "text/x-vcard",
  ".vda": "application/x-vda",
  ".vdx": "application/vnd.visio",
  ".vml": "text/xml",
  ".vpg": "application/x-vpeg005",
  ".vsd": "application/x-vsd",
  ".vss": "application/vnd.visio",
  ".vst": "application/x-vst",
  ".vsw": "application/vnd.visio",
  ".vsx": "application/vnd.visio",
  ".vtx": "application/vnd.visio",
  ".vxml": "text/xml",
  ".wav": "audio/wav",
  ".wax": "audio/x-ms-wax",
  ".wb1": "application/x-wb1",
  ".wb2": "application/x-wb2",
  ".wb3": "application/x-wb3",
  ".wbmp": "image/vnd.wap.wbmp",
  ".wiz": "application/msword",
  ".wk3": "application/x-wk3",
  ".wk4": "application/x-wk4",
  ".wkq": "application/x-wkq",
  ".wks": "application/x-wks",
  ".wm": "video/x-ms-wm",
  ".wma": "audio/x-ms-wma",
  ".wmd": "application/x-ms-wmd",
  ".wmf": "application/x-wmf",
  ".wml": "text/vnd.wap.wml",
  ".wmv": "video/x-ms-wmv",
  ".wmx": "video/x-ms-wmx",
  ".wmz": "application/x-ms-wmz",
  ".wp6": "application/x-wp6",
  ".wpd": "application/x-wpd",
  ".wpg": "application/x-wpg",
  ".wpl": "application/-wpl",
  ".wq1": "application/x-wq1",
  ".wr1": "application/x-wr1",
  ".wri": "application/x-wri",
  ".wrk": "application/x-wrk",
  ".ws": "application/x-ws",
  ".ws2": "application/x-ws",
  ".wsc": "text/scriptlet",
  ".wsdl": "text/xml",
  ".wvx": "video/x-ms-wvx",
  ".xdp": "application/vnd.adobe.xdp",
  ".xdr": "text/xml",
  ".xfd": "application/vnd.adobe.xfd",
  ".xfdf": "application/vnd.adobe.xfdf",
  ".xhtml": "text/html",
  ".xls": "application/x-xls",
  ".xlw": "application/x-xlw",
  ".xml": "text/xml",
  ".xpl": "audio/scpls",
  ".xq": "text/xml",
  ".xql": "text/xml",
  ".xquery": "text/xml",
  ".xsd": "text/xml",
  ".xsl": "text/xml",
  ".xslt": "text/xml",
  ".xwd": "application/x-xwd",
  ".x_b": "application/x-x_b",
  ".x_t": "application/x-x_t"
}

注意:如果需要下载文件流的,则

public void downloadFile(HttpServletResponse response, String objectName){
        InputStream objectInputStream = minioTemplate.getObject("",objectName);//导出的文件流
        response.setContentType(minioTemplate.statObject("",objectName).contentType());//获取返回放的文件类型
        ServletOutputStream outputStream=null;//输出流
        try {
            outputStream = response.getOutputStream();
            IOUtils.copy(objectInputStream,outputStream);
        } catch (Exception ex) {
            log.error(ex.getMessage());
        } finally {
            try {
                outputStream.close();
            }catch (Exception ex){
                log.error(ex.getMessage());
            }
        }
    }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
整合MinioSpring Boot可以通过以下几个步骤完成: 1. 首先,需要在pom.xml文件中添加Minio依赖项。你可以使用以下代码片段添加依赖项: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.3</version> </dependency> ``` 2. 接下来,在application.yml(或application.properties)文件中配置Minio的连接信息。你需要提供Minio服务端的地址、访问密钥和存储桶名称。以下是一个示例: ```yaml minio: url: 129.0.0.1:9000 access-key: minioadmin secret-key: minioadmin bucket-name: ding_server ``` 3. 最后,在你的代码中使用Minio客户端库进行操作。你可以根据需要使用Minio的API来上传、下载和管理对象。以下是一个使用Minio客户端库的示例: ```java import io.minio.MinioClient; import io.minio.errors.MinioException; // 创建Minio客户端 MinioClient minioClient = new MinioClient("http://localhost:9000", "minioadmin", "minioadmin"); // 上传对象到Minio存储桶 minioClient.putObject("your-bucket-name", "your-object-name", "/path/to/your-file"); // 下载对象从Minio存储桶 minioClient.getObject("your-bucket-name", "your-object-name", "/path/to/save/downloaded-file"); // 列出Minio存储桶中的所有对象 Iterable<Result<Item>> results = minioClient.listObjects("your-bucket-name"); for (Result<Item> result : results) { Item item = result.get(); System.out.println(item.objectName()); } // 删除Minio存储桶中的对象 minioClient.removeObject("your-bucket-name", "your-object-name"); ``` 以上就是在Spring Boot整合Minio的基本步骤。你可以根据具体需求进行进一步的操作和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [springboot整合minio](https://blog.csdn.net/qq_36090537/article/details/128100423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot整合Minio](https://blog.csdn.net/weixin_46573014/article/details/128476327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值