1 minio服务器的安装

在下载minio.exe文件:

windows安装minio服务器:MinIO | Code and downloads to create high performance object storage官网下载.exe文件

或者自己到csdn上找一个

我的是放到了D盘里自己的文件夹下

start.bat脚本内容

.\minio.exe server D:\wlc\middlewire\minio

D:\wlc\middlewire\minio ==> 这是我的minio.exe放的文件夹路径

双击start.bat就可以启动,初始密码在.minio.sys文件夹里

叉掉start.bat启动窗口,就是关掉minio了,在双击启动minio,密码生效,到此就部署完毕,linux和这个一样

访问:浏览器地址栏里输入:ip:9000 或者localhost:9000 即可

鼠标点击页面右下放的  + 号,就会出现创建bucket和上传文件选型

点击 上传bucket就会弹出创建bucket窗口,输入名字就可以创建成功,我的是test和wlcfile两个,你的随你的意思吧;

此时文件上传成功,访问图片需要登录,所以我们要把不需要登录就可以访问的图片都放在一个bucket里,我的是wlcfile这个bucket;

然后对wlcfile进行免登录就可以访问配置

到此就可以不用登录就可以访问了,你可以在html里搞个image的html标签来试试

<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title><aaa</title></head><body><div id="app"><img src="http://localhost:9000/wlcfile/98f771f9302dcb1754e1abf34a79c91.png" alt="图片"></body>
</html>

浏览器里就可以访问的了,也可以在浏览器地址栏:http://localhost:9000/wlcfile/98f771f9302dcb1754e1abf34a79c91.png   也可以

2 整合springboot + minio

maven引入依赖

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

在springboot的application.yml中新增minio的配置

minio:endpoint: http://localhost:9000accesskey: xxxxxxxsecretKey: xxxxxxx

我的都放在我的util下的file文件下,方面统一管理

package com.wlc.doc.util.file;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;
}
package com.wlc.doc.util.file;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的配置 并注入bean  MinioClient*/
@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfiguration {@Autowiredprivate MinioProp minioProp;@Beanpublic MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {MinioClient  client =new MinioClient(minioProp.getEndpoint(),minioProp.getAccesskey(),minioProp.getSecretKey());return  client;}
}
package com.wlc.doc.util.file;/*** minio的bucket配置类*/
public class CommonConstants {//bucket的名字public static final String MINIO_BUCKET="wlcfile";
}
package com.wlc.doc.util.file;import com.google.api.client.util.IOUtils;
import com.wlc.doc.exception.BusinessException;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;/*** 描述: minio的util </br>* 时间: 2022-02-26 15:10  </br>* 作者:王林冲*/
@Component
public class MinioUtil {@Autowiredprivate MinioClient minioClient;/*** 上传文件,* @param fileName 文件名* @param inputStream 文件输入流* @param size 文件大小* @param contentType 类型* @return String - 路径 = bucket名字 + "/" + 文件名*/public String uploadByInputStream(String fileName, InputStream inputStream, long size, String contentType){try {minioClient.putObject(CommonConstants.MINIO_BUCKET, fileName, inputStream, size, contentType);return StringUtils.join(CommonConstants.MINIO_BUCKET, "/", fileName) ;} catch (Exception e) {e.printStackTrace();return null;}finally {if (inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 上传文件* @param file MultipartFile* @return*/public String uploadByFile(MultipartFile file) {if(file==null || file.getSize()==0){throw new BusinessException("上传文件不能为空");}String orgfileName = file.getOriginalFilename();orgfileName = orgfileName;InputStream in = null;try {in = file.getInputStream();String contentType= file.getContentType();minioClient.putObject(CommonConstants.MINIO_BUCKET, orgfileName, in, file.getSize(), contentType);return StringUtils.join(CommonConstants.MINIO_BUCKET, "/", orgfileName);} catch (Exception e) {e.printStackTrace();return null;}finally {if (in != null){try {in.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 下载* @param response* @param fileName 文件名*/public void download( HttpServletResponse response, String fileName) {InputStream in = null;try {//获取文件对象 stat原信息ObjectStat stat = minioClient.statObject(CommonConstants.MINIO_BUCKET, fileName);response.setContentType(stat.contentType());in = minioClient.getObject(CommonConstants.MINIO_BUCKET, fileName);IOUtils.copy(in, response.getOutputStream());} catch (Exception e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}}

controller测试

@RestController
@RequestMapping("/file")
public class FileController {@AutowiredMinioUtil minioUtil;//上传@PostMapping("/minioUpload")public String minioUpload(@RequestParam(name = "file",required = false) MultipartFile file, HttpServletRequest request){String path = minioUtil.uploadByFile(file);return path;}//下载@GetMapping("/minioDownload")public void minioDownload(String fileName, HttpServletResponse response){minioUtil.download(response,fileName);}}

一个用postman测试下,我的ok的

3 配置nginx代理minio的文件访问

安装nginx这里就不说,很简单,自己找个博客部署一个就行,linux和windows一样的

下面的ng的配置文件而已,启动ng后或者重新reload配置都行,自己看下就行

。就是对minio访问进行下反向代理,访问 wlcfile下的文件都不需要登录授权,因为刚刚设置了访问策略了  *.*   还记得吗?嘿嘿


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;upstream minio {server localhost:9000;}#minio的图片访问配置server {listen       9009;server_name  localhost;location / {proxy_pass http://minio;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-NginX-Proxy true;}}}

至此就可以用ng的代理访问了。ng所在的ip  + 代理的端口号 + bucket的名字 + 文件名  就好了

示例:http://localhost:9009/wlcfile/98f771f9302dcb1754e1abf34a79c91.png

http://localhost:9009 -->ng的代理ip和端口

wlcfile:bucket名字

98f771f9302dcb1754e1abf34a79c91.png:这是文件名

补充:linux的minio的部署

下载软件包

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

我的是在/opt/minio文件夹下执行上面的命令,minio是我自己建的文件夹,你可以自己放到自己喜欢的位置

cd /opt/minio
#再执行下面的命令,下载minio文件
wget https://dl.minio.io/server/minio/release/linux-amd64/minio

给minio,你刚刚下载的minio的文件服赋权:

chmod 777 -R minio

再minio文件下,创建log文件夹,再log文件夹中创建minio.log文件,方便日志管理

在/opt/minio文件夹下创建启动和停止脚本,和minio文件同级目录最好,方便管理

启动脚本,start.sh

nohup /opt/minio/minio server --address '你本机内网ip:9000' --console-address '你本机内网ip:9001' /opt/minio > /opt/minio/log/minio.log 2>&1 &

命令解释:

nohup /opt/minio/minio server --address '你本机内网ip:9000' --console-address '你本机内网ip:9001' /opt/minio > /opt/minio/log/minio.log 2>&1 &--address '你本机内网ip:9000'            minio的api地址端口配置,ip是你的内网地址,端口是9000上传下载都用9000,也就是--address '你本机内网ip:9000'你访问可以用你的  外网地址:9000来api访问,也可以用ng来反向代理--console-address '你本机内网ip:9001'    minio控制台地址,端口是9001,你自己随意改,就是浏览器 访问地址/opt/minio                             安装目录,运行的文件保存夹地址,minio的配置文件和你上传的文件都在这里面> /opt/minio/log/minio.log 2>&1 &       日志输出地址 

执行启动脚本:

[root@wlc-node-1 minio]# ./start.sh 

日志:

下面是我的ng反向代理配置,我的是不是在云上服务器的,要把云上服务器端口打开,并且安全组配置放行9000这个api端口,密码和上面windows里的地址和改法一样,在安装目录 下的.minio.sys/config里的 config.json文件里,修改 access_key和 secret_key的value,分别是账号和密码

    #minio的控制台地址upstream minio {server 172.22.221.225:9001;}#minio的文件上传下载访问地址upstream download {server 172.22.221.225:9000;}#minio的控制台配置server {listen       80;server_name  控制台访问ip或者域名;   #对应9001端口location / {proxy_pass http://minio;}}#minio的图片访问配置server {listen       80;server_name  图片访问的ip或者域名;  #对应9000端口location / {proxy_pass http://download;}}

至此你可以用你的springboot项目上传,下载,或者浏览器访问,

注意:上传下载访问的ip或者域名是对应 9000的api端口,浏览器访问的是控制台9001端口的

minio的文件名相同会自动覆盖原先文件

linux下的minio的界面和上面的不太一样,bucket公开访问设置如下

更多精彩分享请移步:IT学习道场

更多分享关注公众号【IT学习道场】

Linux和windows下minio+springboot实现文件服务器上传下载和nginx反向代理相关推荐

  1. Linux使用SSH上传下载文件,Linux下通过ssh scp命令上传下载文件

    Linux下通过ssh scp命令上传下载文件. 1.上传本地文件到服务器 scp /path/filename username@servername:/path/ 例如 scp /var/tale ...

  2. 文件服务器 上传 下载

    什么是文件服务器?文件服务器因为名称是File server,又称为档案伺服器,是网络设备中专门用于存储访问文件的设备,是一种专供其他电脑检索文件和存储的特殊电脑. 其实文件服务器就和我们常说的网盘一 ...

  3. 关于ftp文件服务器上传下载遇到的一些坑

    项目需要做文件的上传下载,由后台定时生成word,pdf文件上传到ftp服务器,然后供客户端下载.聊聊其中遇到的坑 在文件上传的时候,遇到坑之一,编码问题,上传需要对文件进行转码,所以在上传的时候必须 ...

  4. Springboot实现文件上传下载的简单demo(可参考)

    本文章详细介绍使用Springboot如何实现上传文件和下载文件接口 1. 新建一个Springboot项目 File -> New Project 根据下图指引做: 2. 点击next,选择S ...

  5. SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)

    SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2-日志的使用「logback」「log4j」 Spring ...

  6. springboot改文件头_SpringBoot图文教程4—SpringBoot 实现文件上传下载

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  7. linux命令行连接百度网盘快速上传下载数据(bypy)

    摘要 现在的深度学习代码基本都是在服务器上运行,而大部分的服务器都是远程服务器,只支持命令行操作,所以有些在图形界面上比较容易下载的文件,在服务器上使用命令行很难下载.而且由于远程服务器和本地之间数据 ...

  8. windows下sublime通过sftp扩展上传文件到linux服务器上

    首先在package controll下载sftp扩展,在任意磁盘下新建文件夹: 然后,添加该文件夹到sublime中,并在xhell中链接linux服务器,新建目录,mkdir  /home/hel ...

  9. Windows下如何如何将项目上传至GitHub?

    安装git客户端 进入官网,点击右侧下载windows版本的软件包 · · · · · 如果下载慢的话,给一个传送门,可以快速下载: · · · · 双击安装 一直点击下一步就可,安装位置可以自己选择 ...

最新文章

  1. 怎么删除github上的仓库?
  2. Exceptionless使用介绍
  3. 当才华还撑不起梦想时,你应该静下心来看这些
  4. 【2017年第3期】大数据服务三农的初步分析与探索
  5. Glances:一款功能强大的操作系统安全监控平台
  6. Redis面试 - redis 都有哪些数据类型?
  7. VB讲课笔记07:控制结构
  8. SQL Server索引视图以(物化视图)及索引视图与查询重写
  9. Entity Framework(EF)数据查询
  10. exe软件打包工具哪个好_小视频制作软件哪个好?推荐五款超赞小视频制作工具...
  11. bzoj 2212 Tree Rotations
  12. IEEE Access的模板的问题
  13. unity 插件uniwebview 内嵌H5游戏
  14. 动态页面抓取超级指南_减少页面重量的完整指南
  15. 英语口语练习四十三之7种方式说“温柔”
  16. wps-excel的自动分页符(虚线)怎么去掉
  17. Python之人民币与美元的换算
  18. 记一次windows 10 无法升级问题的处理(系统盘MBR转GPT)
  19. OMAPL138 + SPARTAN6 DSP+ARM+FPGA开发例程
  20. 提升项目TPS优化手段

热门文章

  1. 你的收藏夹里,有哪些神奇有趣的小网站?
  2. 「2022 最新版」未认证微信公众号图文中插入外部链接教程
  3. 2019.9.2选择更新分离版
  4. 如何快速制作Gif动图
  5. python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论
  6. linux 内存清理 释放命令,linux 内存清理释放命令(示例代码)
  7. 【EXE PE】了解pe段--PE结构详解
  8. windows 无法完成安装, 若要在此计算机上安装Windows, 请重新启动安装
  9. 蓝桥杯 青少年创意编程大赛 scratch组 (三)
  10. Android 自定义相机 身份证拍照 自定义身份证相机