上一篇主要讲述了在linux系统中搭建一个minio文件服务器,那么这一篇则用来整合java代码中使用,我之前自己已经搭建好了一个springboot项目,那么这一篇将详细讲述如何把minio整合进springboot中,特此说明,本篇只会贴出关于minio的关键代码,至于如何搭建springboot请个人百度或者参考本人即将会写的博客,项目完整代码请到GitHub:https://github.com/Slience-zae/mail-demo.git。废话不多说,上操作步骤。

一、添加配置信息至配置文件

pom文件依赖:文件服务器 + 流操作依赖

 <!--minio文件服务器-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>6.0.11</version>
</dependency>
<!--commons-io 流操作 (可选)-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>

yum文件依赖:minio文件服务器的访问地址以及使用密钥(登录访问时会验证)

# minio 文件存储配置信息
minio:
endpoint: http://192.168.159.129:9000
accesskey: minioadmin
secretKey: minioadmin

propertise文件依赖:存储桶的名称(直接在代码写也能完成,但是为了灵活配置,所以最好将这种信息写在配置文件里面,通过注解方式读取注入到使用的字段中)

#存储桶的key
Bucket.Name=product

二、代码配置

1.创建实体类MinioProp,用于属性封装,将yum文件中的访问路径,密钥等信息封装进该实体类中。

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* minio 属性值
*/
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
/**
* 连接url
*/
private String endpoint;
/**
* 用户名
*/
private String accesskey;
/**
* 密码
*/
private String secretKey;
}

2.编写minio的核心配置类,提供生成MinioClient对象的方法

import com.maven.maildemo.config.vo.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 MinioConfiguration { @Autowired
private MinioProp minioProp; /**
* 获取 MinioClient
*
* @return
* @throws InvalidPortException
* @throws InvalidEndpointException
*/
@Bean
public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
}
}

三、上传、下载方法的实现

import io.minio.MinioClient;
import io.minio.ObjectStat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.apache.commons.io.IOUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map; /**
* minio文件管理,上传,下载文件
*/
@RestController
@RequestMapping("/minio")
public class MinioController {
@Autowired
private MinioClient minioClient; @Value("${Bucket.Name}")
private String bucketName; /**
* 从minio服务器下载文件
* @param request
* @param response
* @param fileName
*/
@PostMapping("/download")
private void download(HttpServletRequest request, HttpServletResponse response,String fileName){
InputStream in = null;
//获取文件对象 start原信息
try {
ObjectStat stat = minioClient.statObject(bucketName,fileName);
response.setContentType(stat.contentType());
//response.setContentType("application/octet-stream;charset=UTF-8");
in = minioClient.getObject(bucketName,fileName);
IOUtils.copy(in,response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}finally {
if(in!=null){
try {
//关闭流操作
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} /**
* 上传文件
* @param file
* @param request
* @return
*/
@PostMapping("/upload")
public String upload(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request){
if(file == null || file.getSize() == 0){
return "上传文件不能为空";
}
//获取文件的真实名称
String orgfileName = file.getOriginalFilename();
try {
//获取文件的输入流信息
InputStream in = file.getInputStream();
//得到内容的类型
String contententType = file.getContentType();
//上传到文件服务器:桶key,文件名,文件的io信息
minioClient.putObject(bucketName,orgfileName,in,null,null,null,contententType);
//封装了文件桶名,文件名等信息.如果前端需要则封装进实体返回给前端,不需要则不用写
Map<String,Object> data = new HashMap<>();
data.put("bucketName",bucketName);
data.put("fileName",orgfileName);
} catch (Exception e) {
e.printStackTrace();
}
return "上传成功";
}
}

需要明白的一点是,minio文件服务器是先创建的存储桶,然后文件是放在存储桶中的,一般来言,我们上传文件到存储桶时会按照一定的格式从新生成一个包含原文件名的文件名称,防止新传入的文件的文件名称与服务器上的文件名称冲突,导致上传失败,我这里只是为了给大家呢演示一下功能,因此不再进行重新生成文件名称,而是直接使用的文件的真实名称。另外,本次搭建也是参考了网上的一篇博客:http://www.tingcream.com/blogArticle/detail/2a396ff149f249de983bb6fae6c4c3a9。本人实际操作搭建成功后才加上了自己的一些改动才写的本篇博客,对以上的一个搭建代码存在疑问,那就是下载文件的代码中finally后面有一个关闭流的操作,但是spring框架应该会默认关闭流的,不需要人为的进行操作,因此我认为finally后的代码完全可以省略。

如有问题,欢迎评论留言。

在Linux系统下搭建和配置一个minio文件服务器(二)的更多相关文章

  1. 在Linux系统下搭建和配置一个minio文件服务器(一)

    1.minio文件服务器的介绍 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日 ...

  2. Linux系统下tomcat的配置

    Linux系统下tomcat的配置 完成后可以输入命令查看日志文件: 最后进入网页测试下吧: 可以出来这个网页就好了

  3. linux系统下搭建自己的web服务器

    之前在windows 2008 server上搭建了一个用于测试的web服务器,但是在打开网站的时候特别的慢,尤其是图片的加载都会失败,当时以为是路径的问题,但是在服务器上自己打开都特别慢,自己实在找 ...

  4. Linux系统下 为命令配置别名

    1.什么是别名 在管理和维护Linux系统的过程中,将会使用到大量命令,有一些很长的命令或用法经常被用到,重复而频繁的输入某个很长命令或用法是不可取的.这时可以使用 别名 功能将这个过程简单化. Li ...

  5. linux系统下jdk安装配置

    1.有jdk包(linux版) 2.放到linux系统下 3.建议在usr下新建jdk目录之后将jdk文件放到该目录下 3.配置系统信息   /etc/profile 需要配置的信息如下:#set j ...

  6. Linux系统下搭建DNS服务器——DNS原理总结

    2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...

  7. linux系统下安装与配置apache

    搭建环境:VMware上虚拟的linux 主机:win  7 安装linux下的Apache前准备: 1.httpd服务的配置文件,默认存储路径:/etc/httpd/conf/httpd.conf( ...

  8. Linux系统下搭建FTP/SFTP服务器

    传输文件经常使用ftp和sftp服务器.Windows下有多种可视化工具,使用快捷.Linux经常需要自行搭建这两种服务器,当然搭建熟练的话,会更加快捷. 1.检查Linux系统是否安装了vsftp和 ...

  9. Linux系统下tomcat安装配置

    Linux系统中Tomcat的安装配置. 前提JDK已经安装好. 安装 下载tomcatwget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0 ...

随机推荐

  1. latex:公式的上下标

    1.行内公式的上下标 在行间公式中,例如\[\max_{i}\]的排版结果是 而在行内公式中,$max_{i}$的排版结果为 ,如果要使其仍在正下方,可插入字体尺寸档次命令 $\displaystyl ...

  2. python chardet模块查看字符编码方式

    电脑配置:联想笔记本电脑 windows8系统 Python版本:2.7.8 本文章撰写时间:2014.12.25 作者:陈东陈 阅读说明: 1.本文都是先解释,后放图片: 2.文中斜体部分要么为需要 ...

  3. Ajax、XMLHttpRequest、JSONP的区别

    来自2020年搜狗的笔试题,第一题就不会

  4. MySQL添加外键报错 - referencing column 'xx' and referenced column 'xx' in foreign key constraint 'xx' are incompatible

    MySQL给两个表添加外键时,报错 翻译意思是:外键约束“xx”中的引用列“xx”和引用列“xx”不兼容 说明两个表关联的列数据类型不一致,比如:varchar 与 int,或者 int无符号 与 i ...

  5. 状态压缩动态规划(状压DP)详解

    0 引子 不要999,也不要888,只要288,只要288,状压DP带回家.你买不了上当,买不了欺骗.它可以当搜索,也可以卡常数,还可以装B,方式多样,随心搭配,自由多变,一定符合你的口味! 在计算机 ...

  6. ssm框架之异常处理

    异常处理思路 系统中异常包括两类:预期异常和运行时异常runtimeexception,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的dao.s ...

  7. Python全局变量的简单使用

    对Pyhon实现静态变量全局变量的方法详解 python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问 ...

  8. synchronized的实现原理——对象头解密

    前言 并发编程式Java基础,同时也是Java最难的一部分,因为与底层操作系统和硬件息息相关,并且程序难以调试.本系列就从synchronized原理开始,逐步深入,领会并发编程之美. 正文 基础稍微 ...

  9. 用python爬虫写一个属于自己的彩虹屁生成器!

    效果图如下:

  10. java服务端实现微信小程序内容安全

    请参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.i ...