> 文章列表 > 分布式对象存储服务minio安装和部署

分布式对象存储服务minio安装和部署

分布式对象存储服务minio安装和部署

一、服务器安装minio

 

1.进行下载

下载地址:

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  --address :9000 --console-address :9001 /home/minio/data > /home/minio/data/minio.log &
ps -ef|grep minio

二、进行访问,并设置桶

        地址:http://127.0.0.1:9000

 


 

 三、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:9000accesskey: minioadminsecretKey: minioadmin

3.创建实体类

这一步,我们将配置文件中 minio 的配置信息通过注解的方式注入到 MinioProp 这个实体中,方便后面我们使用

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 {@Autowiredprivate MinioProp minioProp;/* 获取 MinioClient @return* @throws InvalidPortException* @throws InvalidEndpointException*/@Beanpublic 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 {@Autowiredprivate MinioClient client;@Autowiredprivate MinioProp minioProp;/* 创建bucket @param bucketName bucket名称*/@SneakyThrowspublic 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 {@Autowiredprivate MinioUtils minioUtils;/* 上传 @param file* @param request* @return*/@PostMapping("/upload")@ResponseBodypublic 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();}
}

删除文件:

 //文件删除@DeleteMappingpublic String delete(String name) {try {MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);minioClient.removeObject(BUCKETNAME, name);} catch (Exception e) {return "删除失败"+e.getMessage();}return "删除成功";}