上一篇主要讲述了在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. 使用Seq搭建免费的日志服务

    Seq简介 Seq是老外开发的一个针对.NET平台非常友好的日志服务.支持容器部署,提供一个单用户免费的开发版本. 官网:https://datalust.co/seq 使用文档:https://do ...

  2. wordpress建站如何用SMTP配置邮件通知

    前提条件:你已经有了企业邮箱,相关文章请看:如何开通阿里云企业邮箱免费版(点此前往) 不建议使用主机商提供的邮箱,因为换主机商是比较常见的事情,因此导致的邮箱迁移就有些麻烦了,不如一开始就选择独立的第 ...

  3. Lombok 作者因兼容问题讨伐 IntelliJ IDEA(官方已妥协)

    今天(08/26),你看到本文应该是昨天了. 栈长上班打开电脑,按往常一样打开 IntelliJ IDEA 正准备撸码,突然收到 IDEA 2020.2.1 的更新提醒: 我现在用的还是 2020.1 ...

  4. HTTP系列之跨域资源共享机制(CORS)介绍

    前言 本文将继续解析详解HTTP系列1中的请求/ 响应报文的首部字段,今天带来的跨域资源共享(CORS)机制,具体内容包括CORS的原理.流程.实战,希望能给大家带来收获! CORS简介 跨域资源共享 ...

  5. 企业站如何做长尾关键词seo优化

    http://www.wocaoseo.com/thread-315-1-1.html     很多企业站,优化到一定程度后网站的流量很快就上去了,但是之后网站就无法更进一步.那么对于普通中小型企业站 ...

  6. 性能提升40%: 腾讯 TKE 用 eBPF 绕过 conntrack 优化 K8s Service

    Kubernetes Service 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化的空间 ...

  7. SQL Server解惑——标识列的限制和跳号现象

      1:每个表只能创建一个标识列. 如下测试所示,如果表中有一个标识列,新增一个标识列就会遇到错误"Multiple identity columns specified for table ...

  8. 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  9. C III

    http://cossacksworld.ucoz.co.uk/load/c_iii_files/79 http://cossacksworld.ucoz.co.uk/load/c_iii_files ...

  10. Agumaster漂亮起来了