springboot 使用 minio

springboot 使用 minio

yml 配置

yml 配置
# ====================== ↓↓↓↓↓↓ MinIO文件服务器 ↓↓↓↓↓↓ ======================
minio:url: http://114.67.110.190:9001accessKey: minioadminsecretKey: minioadminbucketName: zpf

maven:

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

属性文件:

package com.example.minio;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoProperties {/*** minio地址+端口号*/private String url;/*** minio用户名*/private String accessKey;/*** minio密码*/private String secretKey;/*** 文件桶的名称*/private String bucketName;}

工具类:

package com.example.minio;import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;@Slf4j
@Component
public class MinIoUtil {@AutowiredMinIoProperties minIoProperties;private static MinioClient minioClient;/*** 初始化minio配置** @param :* @return: void* @date : 2020/8/16 20:56*/@PostConstructpublic void init() {try {minioClient = new MinioClient(minIoProperties.getUrl(), minIoProperties.getAccessKey(),minIoProperties.getSecretKey());createBucket(minIoProperties.getBucketName());} catch (Exception e) {e.printStackTrace();log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());}}/*** 判断 bucket是否存在** @param bucketName:*            桶名* @return: boolean* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static boolean bucketExists(String bucketName) {return minioClient.bucketExists(bucketName);}/*** 创建 bucket** @param bucketName:*            桶名* @return: void* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static void createBucket(String bucketName) {boolean isExist = minioClient.bucketExists(bucketName);if (!isExist) {minioClient.makeBucket(bucketName);}}/*** 获取全部bucket** @param :* @return: java.util.List<io.minio.messages.Bucket>* @date : 2020/8/16 23:28*/@SneakyThrows(Exception.class)public static List<Bucket> getAllBuckets() {return minioClient.listBuckets();}/*** 文件上传** @param bucketName:*            桶名* @param fileName:*            文件名* @param filePath:*            文件路径* @return: void* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static void upload(String bucketName, String fileName, String filePath) {minioClient.putObject(bucketName, fileName, filePath, null);}/*** 文件上传** @param bucketName:*            桶名* @param fileName:*            文件名* @param stream:*            文件流* @return: java.lang.String : 文件url地址* @date : 2020/8/16 23:40*/@SneakyThrows(Exception.class)public static String upload(String bucketName, String fileName, InputStream stream) {minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));return getFileUrl(bucketName, fileName);}/*** 文件上传** @param bucketName:*            桶名* @param file:*            文件* @return: java.lang.String : 文件url地址* @date : 2020/8/16 23:40*/@SneakyThrows(Exception.class)public static String upload(String bucketName, MultipartFile file) {final InputStream is = file.getInputStream();final String fileName = file.getOriginalFilename();minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));is.close();return getFileUrl(bucketName, fileName);}/*** 删除文件** @param bucketName:*            桶名* @param fileName:*            文件名* @return: void* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static void deleteFile(String bucketName, String fileName) {minioClient.removeObject(bucketName, fileName);}/*** 下载文件** @param bucketName:*            桶名* @param fileName:*            文件名* @param response:* @return: void* @date : 2020/8/17 0:34*/@SneakyThrows(Exception.class)public static void download(String bucketName, String fileName, HttpServletResponse response) {// 获取对象的元数据final ObjectStat stat = minioClient.statObject(bucketName, fileName);response.setContentType(stat.contentType());response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));InputStream is = minioClient.getObject(bucketName, fileName);IOUtils.copy(is, response.getOutputStream());is.close();}/*** 获取minio文件的下载地址** @param bucketName:*            桶名* @param fileName:*            文件名* @return: java.lang.String* @date : 2020/8/16 22:07*/@SneakyThrows(Exception.class)public static String getFileUrl(String bucketName, String fileName) {return minioClient.presignedGetObject(bucketName, fileName);}}

minio分布式存储真香,还不赶快了解下?

在开发中经常会用到的就是文件存储了,以前经常都是在服务器目录上映射一个目录用来存储文件,这个当然也没有问题,如果存储量不大的话。当然还有的会选择使用第三方存储比如七牛云、阿里云的oss云储存方案,自己搭建常用的可能会使用fastdfs或其他的,我接触minio后发现这个还是很不错,使用简单,支持多种语言SDK开发起来特别方便,多的就不说了,赶快上车了解下。

文档地址:minio相关文档

docker快速安装单机版:(默认你已经安装了docker环境,不清楚先了解docker安装使用再来吧!)

GNU/Linux 和 macOS

docker run -p 9000:9000 --name minio1 \-v /mnt/data:/data \-v /mnt/config:/root/.minio \minio/minio server /data指定密钥:
docker run -p 9000:9000 --name minio1 \-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \-v /mnt/data:/data \-v /mnt/config:/root/.minio \minio/minio server /data

Windows

docker run -p 9000:9000 --name minio1 \-v D:\data:/data \-v D:\minio\config:/root/.minio \minio/minio server /data指定密钥:
docker run -p 9000:9000 --name minio1 \-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \-v D:\data:/data \-v D:\minio\config:/root/.minio \minio/minio server /data

特别提醒:(-v 映射路径一定要是绝对路径,不然启动会报错)

启动成功后访问浏览器:http://localhost:{port} 进行访问,不指定key和secret默认都是minioadmin,访问后进入登陆页面,输入key和secret即可登陆,登陆成功页面如下:

img

接下来点击红色按钮创建一个存储桶,即可上传文件,比如创建一个test

img

ok至此已经搭建完成了,就是这么简单就搭建好了一个简单的云存储系统了。
总结: 通过简单操作,搭建了好了,minio默认提供了管理页面,使用起来方便不要开发都可以直接使用,所以还是觉得很不错的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythonsql注入步骤_防止SQL注入解决方案

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。对于很多网站都有用户提交表单的端口&#xff0c;提交的数据插入MySQL数据库中&#xff0c;就有可能发生SQL注入安全问题&#xff0c;那么&#…

立创EDA

绘制PCB流程&#xff1a; 画原理图 ——> 画原理图 ——> 布线 ——> 铺铜 器件&#xff1a; 器件就是一个个不同的元件&#xff0c;每个元件不同的引脚有不同的功能&#xff0c;但有可能封装是一样的&#xff0c;所以将器件和封装练习起来&#xff0c;才能将…

linux和信息资源管理,Linux top命令详解

top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器。下面详细介绍它的使用方法和各参数的含义。在终端敲入 top后&#xff0c;会显示如下类似的信息&#xff1a;Top - 01:06:48 up 1:22, 1 use…

python中sorted函数的用法_Python3 中sorted() 函数的用法

描述 sorted() 函数对所有可迭代的对象进行排序操作。 语法 sorted(iterable, keyNone, reverseFalse) iterable – 可迭代对象。 key – 主要是用来进行比较的元素&#xff0c;只有一个参数&#xff0c;具体的函数的参数就是取自于可迭代对象中&#xff0c;指定可迭代对象中的…

springboot整合minio最新版

第一步&#xff1a;查找minio最新依赖&#xff0c;通过maven查询网站查询,这搜索框输入minio&#xff0c; 也可以查看MinIO官网https://docs.min.io/docs/java-client-quickstart-guide.html 如下: 点击minio进入查看maven依赖&#xff0c;可以看到最新版为8.3.4 <dependen…

linux openh264 编译,在Linux下为Android构建openh264

我正在尝试构建openh264以在android上使用-我有来自git的最新openh264源码-我已经ndk 17-我正在使用Ubuntu 16.04跑步make OSandroid NDKROOT/home/r/aff/ndk TARGETandroid-27 NDKLEVEL27 sysroot/home/r/aff/ndk/sysroot我得到了错误&#xff1a;rr:~/aff/openh264$ make OSa…

学生学籍管理系统python_使用Python实现 学生学籍管理系统

大家好&#xff0c;今天跟大家分享一个用Python实现的学生学籍管理系统&#xff1a; 该代码主体由五个函数组成&#xff1a; 1.add_stu() 添加 2.del_stu() 删除 3.print_stu()打印 4.exit_stu() 退出 5.system() 主函数 1.add_stu() 此段函数作用&#xff1a;把输入的值存入字…

Okhttp使用详解

在Android开发中&#xff0c;发送HTTP请求是很常见的。SDK中自带的HttpURLConnection虽然能基本满足需求&#xff0c;但是在使用上有诸多不便&#xff0c;为此&#xff0c;square公司实现了一个HTTP客户端的类库——Okhttp 。 Okhttp是一个支持HTTP 和 HTTP/2 的客户端&#x…

如何开发rest接口服务_如何简化网络请求接口开发

日常开发中&#xff0c;需要大量和后端对接接口&#xff0c;很容易写出大量的模板代码&#xff0c;比如把对接口的请求放到组件内&#xff0c;或者虽然有数据访问层&#xff0c;但是有大量 get&#xff0c;post 方法的调用&#xff0c;传参的字符串拼接&#xff0c;异常处理等等…

OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3

OkHttp协议 okhttp是一个第三方类库&#xff0c;用于android中请求网络 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 文件下载用Get方式 OkHttpClient okHttpClient new OkHttpClient.Builder().callTimeout…

质量属性效用树例子_数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇

HT 是啥&#xff1a;Everything you need to create cutting-edge 2D and 3D visualization.这口号是当年心目中的产品方向&#xff0c;接着就朝这个方向慢慢打磨&#xff0c;如今 HT 算是达到了这样的效果&#xff0c;谈不上用尽洪荒之力&#xff0c;但我们对产品结果很满意&a…

linux vi 出现下划线,Vim高亮当前行(显示为下划线)的解决方案

最近配置Vim&#xff0c;由于以前的vimrc早已丢失&#xff0c;只好重新配置一份&#xff0c;此为题外话&#xff0c;略过不提…在Vim中&#xff0c;可以选择开启高亮当前行&#xff0c;这是一个很不错的特性。开启它也很简单&#xff0c;只需要在vimrc中加入这么一行&#xff1…

springBoot 简单优雅是实现文件上传和下载

前言 好久没有更新spring Boot 这个项目了。最近看了一下docker 的知识&#xff0c;后期打算将spring boot 和docker 结合起来。刚好最近有一个上传文件的工作呢&#xff0c;刚好就想起这个脚手架&#xff0c;将文件上传和下载整理进来。 配置 在application.properties 中增…

C语言的VC开发环境界面介绍,【c语言在vc++6.0中编写界面程序】

到现在为止&#xff0c;C 仍然是计算机编程领域的经典语言之一&#xff0c;C 17 标准在2017上半年已经探讨确定。本期我们汇集了编程专家——祁宇(《深入应用 C 11》作者&#xff0c;C 开源社区 purecpp.org 创始人)的多年心得小结&#xff0c;并具体介绍了 C 17 最新标准中值得…

SpringBoot+VUE 前端加密算法 RSA+DES

前言 为了提高用户登陆的安全性&#xff0c;公司准备整理一份相对安全的登陆模式。 想法 主流加密算法 主流加密算法 &#xff08;一&#xff09;对称加密AES ,其特点是&#xff1a;算法简单&#xff0c;加密速度快&#xff1b; &#xff08;二&#xff09;非对称加密方式&…

spring cloud微服务_年后进大厂,必备这份微服务面试题:Dubbo+SpringBoot+Cloud

Dubbo面试题Dubbo与DubboX区别Dubbo中zookeeper做注册中心&#xff0c;如果注册中心集群都挂掉&#xff0c;发布者和订阅者之间还能通信么&#xff1f;Dubbo中有哪些角色&#xff1f;Dubbo在安全机制方面是如何解决的Dubbo执行流程&#xff1f;Dubbo支持的协议有哪些&#xff1…

c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统 报告(内含代码).doc...

C语言程序设计姓名&#xff1a;张强强学号&#xff1a;20121003695班序号&#xff1a;011121前言&#xff1a;C语言是近年来国内得到迅速推广使用的一种计算机语言。C语言程序设计课程是计算机专业和信息管理专业的核心专业基础课&#xff0c;无论是计算机专业还是非计算器专业…

前端 - token 是什么?为什么每次请求头(HEADS)里要携带它?___请求时,为什么要携带token?

前端 - token 是什么&#xff1f;为什么每次请求头&#xff08;HEADS&#xff09;里要携带它&#xff1f; Token token 是客户端频繁向服务器端请求数据&#xff0c;服务器频繁的去数据库查询用户名和密码进行对比&#xff0c;判断用户名和密码正确与否&#xff0c;并作出相应…

全栈工程师薪水_2020 Java 全栈工程师进阶路线图,不可错过

技术更新日新月异&#xff0c;对于初入职场或者刚开始学习的同学来说&#xff0c;经常会困惑该往那个方向发展&#xff0c;这一点所有刚开始学习的人基本都有这个体会的。刚开始学习 Java 那会&#xff0c;最大的问题就是不知道该学什么&#xff0c;以及学习的顺序&#xff0c;…

5乘7的c语言程序,C语言程序设计实验5-7教案(20页)-原创力文档

第 7-8 次课程名称 程序设计基础 课程性质 实验课授课班级 网络 16-1 、2 授课地点 14022016 年 11 月 9 日第 5 小节 ~第 8 小节授课时间 2016 年 11 月 16 日第 5 小节~第 8 小节2016 年 11 月 23 日第 5 小节~第 8 小节课题&#xff1a; 实验六、 数组的应用—— 4 学时主要…