MinIO+SpringBoot使用

windows环境搭建

Linux环境搭建


windows环境搭建

首先给出官网和镜像:

  • 中国镜像:
    http://dl.minio.org.cn/server/minio/release/windows-amd64/
  • 官网:https://docs.minio.io/ https://docs.minio.io/cni

接下来正式介绍

启动minio

通过镜像下载minio.exe后保存至存放的位置,这里保存在C:\develop\minio
打开cmd文件进入C:\develop\minio
执行命令: .\minio.exe server C:\develop\minio
看到以下输出表示成功运行,通过提示的网站链接和用户名/密码可以登录后台管理系统:
minio windows环境启动成功

然后配置minio,根据自己窗口输出的地址进行登录,成功登录后新建一个桶,并把桶策略改为Read and Write,并且prefix改为*
新建桶
配置 为读写

整合SpringBoot或者SpringCloud

运行成功后接下来配置工程,使得工程能够上传文件到minio、从minio中删除文件以及通过连接访问文件,通常访问的格式是 http://ip:port/桶名称/文件名。
首先pom文件中引入jar包

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

接下来配置yml文件:

projectconfig:
  encryptKey: hlkjhlkjhlkjhlkjhlkjhlkj
  ip: 192.168.1.132
  port: 12002
  appid: xxxx
  appsecret: xxxx
  expire: 3600 #秒
  miniourl: http://192.168.1.132:9000
  minioaccesskey: minioadmin
  miniosecretkey: minioadmin
  miniobucketname: test
  minioport: 9000
  minioip: 192.168.1.132

然后把minioClient集成进SpringBoot:

import io.minio.MinioClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ConfigBean {
	
	private final static Log _logger = LogFactory.getLog(ConfigBean.class);
	
	@Autowired
	private YmlProjectConfig _ymlProjectConfig;
	
	//@LoadBalanced
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	@Bean
	public MinioClient minioClient() {
		
		try {
			MinioClient client = new MinioClient(_ymlProjectConfig.getMiniourl(),
					_ymlProjectConfig.getMinioaccesskey(),
					_ymlProjectConfig.getMiniosecretkey());
			
			if(client.bucketExists(_ymlProjectConfig.getMiniobucketname())) {
				_logger.info("已创建桶");
			}else {
				client.makeBucket(_ymlProjectConfig.getMiniobucketname());
				_logger.info("成功创建桶");
			}
			
			//client.setBucketPolicy(_ymlProjectConfig.getMiniobucketname(), policy);
			return client;
		} catch (Exception e) {
			_logger.error("", e);
			return null;
		} 
	}
}

接下来给出配置类ymlProjectConfig的源码


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:application.yml")
@ConfigurationProperties(prefix = "projectconfig")    
public class YmlProjectConfig {
	/**3des的秘钥**/
	private String encryptKey;
	/**本项目的ip地址**/
	private String ip;
	/**本项目的端口号**/
	private String port;
	
	private String appid;
	
	private String appsecret;
	/**模板id**/
	private String templateid;
	
	private Long expire;

	private String miniourl;

	private String minioaccesskey;

	private String miniosecretkey;

	private String miniobucketname;

	private String minioport;

	private String minioip;
	
	public String getEncryptKey() {
		return encryptKey;
	}

	public void setEncryptKey(String encryptKey) {
		this.encryptKey = encryptKey;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public String getPort() {
		return port;
	}

	public void setPort(String port) {
		this.port = port;
	}

	public String getAppid() {
		return appid;
	}

	public void setAppid(String appid) {
		this.appid = appid;
	}

	public String getAppsecret() {
		return appsecret;
	}

	public void setAppsecret(String appsecret) {
		this.appsecret = appsecret;
	}

	public String getTemplateid() {
		return templateid;
	}

	public void setTemplateid(String templateid) {
		this.templateid = templateid;
	}
	public Long getExpire() {
		return expire;
	}

	public void setExpire(Long expire) {
		this.expire = expire;
	}

	public String getMiniourl() {
		return miniourl;
	}

	public void setMiniourl(String miniourl) {
		this.miniourl = miniourl;
	}

	public String getMinioaccesskey() {
		return minioaccesskey;
	}

	public void setMinioaccesskey(String minioaccesskey) {
		this.minioaccesskey = minioaccesskey;
	}

	public String getMiniosecretkey() {
		return miniosecretkey;
	}

	public void setMiniosecretkey(String miniosecretkey) {
		this.miniosecretkey = miniosecretkey;
	}

	public String getMiniobucketname() {
		return miniobucketname;
	}

	public void setMiniobucketname(String miniobucketname) {
		this.miniobucketname = miniobucketname;
	}

	public String getMinioport() {
		return minioport;
	}

	public void setMinioport(String minioport) {
		this.minioport = minioport;
	}

	public String getMinioip() {
		return minioip;
	}

	public void setMinioip(String minioip) {
		this.minioip = minioip;
	}
}

再封装一个service用于上传和下载,切记一定要把header设为对应的格式,因为上传时默认是Content-Type的值是application/octet-stream,这样的通过返回的链接是下载文件,所以要改对应的格式这里的测试文件是jpg格式,所以设置为imgae/jpeg:

@Service
public class MinioService {

	private final static Log _logger = LogFactory.getLog(MinioService.class);
	
	@Autowired
	private MinioClient _minioClient;
	
	@Autowired
	private YmlProjectConfig _ymlProjectConfig;
	
	/**
	 * 删除文件
	 * @param fileName
	 */
	public void deleteFile(String fileName) {
		
		try {
			_minioClient.removeObject(_ymlProjectConfig.getMiniobucketname(), fileName);
		} catch (Exception e) {
			_logger.error("", e);
		}
	}

	/**
	 * 上传文件
	 * @param inputStream
	 * @param fileName
	 * @return
	 */
	public String uploadFile(InputStream inputStream, String fileName, String contentType) {
		
		try {
			
			Map<String, String> headers = new HashMap<String, String>();
			headers.put("Content-Type", contentType);
			PutObjectOptions options = new PutObjectOptions(inputStream.available(), -1);
			options.setHeaders(headers);
			_minioClient.putObject(_ymlProjectConfig.getMiniobucketname(), fileName, inputStream, options);
			return _minioClient.getObjectUrl(_ymlProjectConfig.getMiniobucketname(), fileName);
		} catch (Exception e) {
			_logger.error("", e);
			return null;
		}
		
	}
}

这里给出常见的格式,常见的媒体格式类型如下:

text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发
送到服务器(表单默认的提交数据的格式)

再搞个单元测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {FIServer.class, MinioServiceTest.class})
public class MinioServiceTest {
	@Autowired
	private MinioService _minioService;
	
	@Test
	public void uploadTest() {
		
		try {
			InputStream inputStream = new FileInputStream("C:\\Users\\yang\\Desktop\\yy.jpg");
			String url = _minioService.uploadFile(inputStream, "cc.jpg", "image/jpeg");
			System.out.println(url);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void deleteTest() {
		
		try {
			_minioService.deleteFile("yy.jpg");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

如下图所示,可以保存返回的访问地址

在这里插入图片描述

centos 7.6安装Minio

首先选择一个文件目录并创建minio:

cd /usr/project/minio

然后为该目录赋予权限

chmod 777 minio

测试是否可以,那这里是不能后台挂起的,如果退出终端就会强制结束进程,命令后面的路径是指数据存放路径:

./minio server /usr/project/minio/data/

后台挂起允许:

nohup /usr/project/minio/minio server /usr/project/minio/data > /usr/project/minio/minio.log 2>&1 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值