首先自己配置Minio服务器 和客户端 请点击 官网地址http://www.minio.org.cn

安装完成后自己百度win10安装。

我是用Spring boot 配置 首先导入 Minio Dependency配置

        <!-- minio服务器--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.0</version></dependency><dependency><groupId>me.tongfei</groupId><artifactId>progressbar</artifactId><version>0.5.3</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.8.1</version></dependency>

接着配置yml (yml的配置一定要对齐!!!!!) #号代表注释

minio:#minio服务器配置endpoint: http://127.0.0.1:9002  //Minio服务器端口#minio服务器配置账号accessKey: 自己配置的账号#minio服务器配置密码secretKey: 自己配置的密码#minio服务器桶bucketName: 自己设置的桶名

我的Minion客户端界面:

接下来是我的:controller层代码

import com.alibaba.fastjson.JSON;
import com.dlsp.server.pojo.RespseBean;
import io.minio.*;
import io.minio.messages.Item;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.compress.utils.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.*;@RestController
@RequestMapping("/system/init")
public class MinioController {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;@ApiOperation(value = "查看文件集")@GetMapping("/minioList")public List<Object> list() throws Exception {//获得bucket列表Iterator<Result<Item>> iterator = MyMinioLists().iterator();List<Object> items = new ArrayList<>();String format = "{'fileName':'%s','fileSize':'%s'}";while (iterator.hasNext()) {Item item = iterator.next().get();items.add(JSON.parse(String.format(format, item.objectName(), formatFileSize(item.size()))));}return items;}/*** 获取Minio服务器所有的结果集** @return*/public Iterable<Result<Item>> MyMinioLists() {Iterable<Result<Item>> myObejcts = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());return myObejcts;}@ApiOperation(value = "删除文件")@DeleteMapping("/minioDelete/{fileName}")public RespseBean delete(@PathVariable("fileName") String fileName) {try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());} catch (Exception e) {e.printStackTrace();return RespseBean.error("删除失败");}return RespseBean.success("删除成功");}@ApiOperation("文件上传(多)")@PostMapping("/minioUpload")public RespseBean upload(@RequestBody MultipartFile[] file) {  //多文件上传if (file == null || file.length == 0) {return RespseBean.error("上传文件不能为空");}List<String> orgFileNameList = new ArrayList<>(file.length);for (MultipartFile multipartFile : file) {String orgfileName = multipartFile.getOriginalFilename();  //获得文件的原始名称;orgFileNameList.add(orgfileName);InputStream in = null;try { //文件上传in = multipartFile.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(orgfileName).stream(in, multipartFile.getSize(), -1).contentType(multipartFile.getContentType()).build());} catch (Exception e) {return RespseBean.error("文件上传失败");} finally {try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}}Map<String, Object> data = new HashMap<String, Object>();data.put("bucketName", bucketName);data.put("fileName", orgFileNameList);return RespseBean.success("添加成功", data);}//@PathVariable主要用于接收http://host:port/path/{参数值}数据。// @RequestParam主要用于接收http://host:port/path?参数名=参数值数据.@ApiOperation("文件下载")@GetMapping(value = "/minioDownload/{fileName}", produces = "application/octet-stream")public void downLoad(HttpServletResponse response, @PathVariable("fileName") String fileName) {InputStream in = null;try {//根据文件名获得对象StatObjectResponse stat = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());response.setContentType(stat.contentType());//设置浏览器链接 下载文件response.setHeader("content-type", "application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//根据对象 -->  文件下载in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());IOUtils.copy(in, response.getOutputStream());} catch (Exception e) {} finally {if (in != null) {try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}}}/*** 查看文件大小** @param fileS* @returna*/private static String formatFileSize(long fileS) {DecimalFormat df = new DecimalFormat("#.00");String fileSizeString = "";String wrongSize = "0B";if (fileS == 0) {return wrongSize;}if (fileS < 1024) {fileSizeString = df.format((double) fileS) + " B";} else if (fileS < 1048576) {fileSizeString = df.format((double) (fileS >> 10)) + " KB";} else if (fileS < 1073741824) {fileSizeString = df.format((double) (fileS >> 20)) + " MB";} else if (fileS > 1073741824) {fileSizeString = df.format((double) (fileS >> 30)) + " GB";}return fileSizeString;}

我直接在Controller做完了所有
接下来是我在前端Vue +饿了么-Ui做的管理
自己根据导入的jar包 去官方文档 Minioclient 去使用具体的方法
SDK方法区:(自己看)
链接https://docs.min.io/docs/java-client-quickstart-guide.html
我的前端VUE

<template><div><div><el-uploadaction="/system/init/minioUpload":before-upload="beforeUpload":on-success="onSuccess":on-error="onError":disabled="importDataDisabled"style="display: inline-flex;margin-right: 8px":show-file-list="false":headers="headers"><el-button size="small" :disabled="importDataDisabled" type="success" :icon="importDataBtnIcon">{{importDataBtnText}}</el-button></el-upload><el-button size="small" type="primary" icon="el-icon-loading" @click="refresh">刷新</el-button><div><el-input size="small" style="width: 300px;margin-top: 5px" prefix-icon="el-icon-search" placeholder="请输入文件名进行搜索..."v-model="fileName1"></el-input><el-button type="primary" size="small" style="margin-left: 5px"icon="el-icon-search"@click="MinioList1">查询文件</el-button></div></div><div><el-table :data="list"><el-table-column prop="fileName" label="文件名"></el-table-column><el-table-column prop="fileSize" label="文件大小"></el-table-column><el-table-column fixed="right" width="100" label="操作"><template slot-scope="scope"><el-button type="primary" style="padding: 3px" size="mini" @click="downloadMinio(scope.row)">下载</el-button><el-button style="padding: 3px" size="mini" type="danger" @click="deleteMinio(scope.row)">删除</el-button></template></el-table-column></el-table></div></div>
</template><script>export default {name: "SysInit",data() {return {importDataBtnText: '导入文件',importDataBtnIcon: 'el-icon-upload2',importDataDisabled: false,fileList: [],headers: {Authorization: window.sessionStorage.getItem('tokenStr')},list: [],fileName: null,fileName1: null};},mounted() {this.MinioList();},methods: {onError() {this.importDataBtnText = '文件导入失败';this.importDataBtnIcon = 'el-icon-upload3';this.importDataDisabled = false;},onSuccess() {this.importDataBtnText = '文件导入成功';this.importDataBtnIcon = 'el-icon-upload2';this.importDataDisabled = false;this.MinioList();},beforeUpload() {this.importDataBtnText = '正在导入';this.importDataBtnIcon = 'el-icon-loading';this.importDataDisabled = true;},MinioList() {this.getRequest('/system/init/minioList').then(resp => {if (resp) {this.list = resp;}})},MinioList1() {this.getRequest('/system/init/minioSelect/?fileName=' + this.fileName1).then(resp => {if (resp) {this.list = resp;}})},downloadMinio(data) {this.downloadRequest('/system/init/minioDownload/' + data.fileName);},deleteMinio(data) {this.deleteRequest('/system/init/minioDelete/' + data.fileName).then(resp => {if (resp) {console.log(JSON.parse(resp));this.MinioList();}})},refresh() {const loading = this.$loading({lock: true,text: '正在加载...',spinner: 'el-icon-loading',background: 'rgba(0, 0, 3, 0.8)'});this.MinioList();setTimeout(() => {loading.close();}, 800);}}}
</script><style scoped></style>

展示图:

这是我简单的就是文件CRUD
接下来是: 保存服务器文件并生成网络路径 存放在在Mysql 当中 和修改头像功能

修改管理员的头像 Controller层:

import com.dlsp.server.pojo.Admin;
import com.dlsp.server.pojo.RespseBean;
import com.dlsp.server.service.IAdminService;
import io.minio.*;
import io.minio.http.Method;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.concurrent.TimeUnit;/*** @author : lqs* @data : 个人中心* @since :1.0.0*/
@RestController
public class AdminInfoController {@Autowiredprivate IAdminService adminService;@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;/*** 更新用户当前信息* @param admin 用户信息* @param authentication 登陆的当前用户* @return*/@ApiOperation(value = "更新用户当前信息")@PutMapping("/admin/net")public RespseBean updateAdminInfo(@RequestBody Admin admin, Authentication authentication) {if (adminService.updateById(admin)) {SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(admin, null, authentication.getAuthorities()));return RespseBean.success("adminIfo:修改用户信息成功");}return RespseBean.error("adminIfo:修改用户信息失败");}/*** 更新用户密码* @param info 存放新密码和旧密码* @return*/@ApiOperation(value = "更新用户密码")@PutMapping("/admin/pass")public RespseBean updateAdminPassword(@RequestBody Map<String, Object> info) {String oldPass = (String) info.get("oldPass");String pass = (String) info.get("pass");Integer adminId = (Integer) info.get("adminId");return adminService.updateAdminPassword(oldPass, pass, adminId);}/**** @param file 单个文件* @param id 用户ID* @param authentication 当前用户* @return*/@ApiOperation(value = "更新头像")@PostMapping("/admin/userFace")public RespseBean updateAdminFase(MultipartFile file, Integer id, Authentication authentication) {if (file == null || file.isEmpty()) {return RespseBean.error("上传文件不能为空");}InputStream in = null;String orgfileName = file.getOriginalFilename(); //获取文件名System.out.println("文件名" + orgfileName);Map<String, String> reqParams = new HashMap<String, String>();reqParams.put("response-content-type", "image/png");String url = "";try {in = file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(orgfileName).stream(in, file.getSize(), -1).contentType(file.getContentType()).build());} catch (Exception e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}} catch (Exception e) {e.printStackTrace();}}BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();Integer expires = 604800;try {boolean flag = minioClient.bucketExists(bucketExistsArgs);if (flag) {GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(orgfileName).expiry(expires).build();url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);System.out.println(url);}} catch (Exception e) {e.printStackTrace();}return adminService.updateUserFace(url, id, authentication);}}
Service修改头像:```java/*** 更新用户头像* @param url* @param id* @param authentication* @return*/@Overridepublic RespseBean updateUserFace(String url, Integer id, Authentication authentication) {Admin admin = adminMapper.selectById(id);admin.setUserface(url);int result = adminMapper.updateById(admin);if(1 == result){Admin principal = (Admin) authentication.getPrincipal();principal.setUserface(url);SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(admin,null,authentication.getAuthorities()));return RespseBean.success("修改用户头像成功");}return RespseBean.error("更新失败!");}
头像在数据库只能保存7天,7天后过期,再次上传。前端Vue展示:```javascript<el-uploadaction="/admin/userFace":headers="headers":data="admins":on-success="onSuccess":show-file-list="false"><img :src="admins.userface" class="image"></el-upload>

这就是我大致的Minio 所做的操作
下面是我的数据库:
varchar 255不够 生成的图片链接用400即可.
《 !!这是我生成的本地图片地址 以为我没买服务器嘻嘻。
http://127.0.0.1:9002/lqs/%E5%9B%BE1.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=sharkdidi%2F20211222%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211222T023153Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=43e13eb3b0b9386ca627ae7205714c67e5d2f078e562b7a10165a51b8a0eb318

谢谢大嘎 全是干货 点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

minio服务器在win10的上传与下载,以及修改头像Minio速看免费本地文件服务器相关推荐

  1. MinIO基本使用(实现上传、下载功能)

    MinIO基本使用(实现上传.下载功能) 1.简介 2.下载和安装 3.启动服务端 4.创建User和Bucket 4.1 创建User 4.1.1 生成accessKey和secretKey 4.2 ...

  2. Python实现阿里云aliyun服务器里的文件上传与下载

    Python实现阿里云服务器里的文件上传与下载 Python实现阿里云服务器里的文件上传与下载 背景: 正文: 预备环境: 构想: 实现: 注意: 结尾 018.4.15 背景: 老实说,因为现实的各 ...

  3. python程序发布到阿里云云服务器_Python实现阿里云服务器里的文件上传与下载

    Python实现阿里云服务器里的文件上传与下载 018.4.15 背景: 老实说,因为现实的各种原因造成电脑换来换去是可能出现的事情,但是电脑能换,电脑里的环境却不能换.我就曾在三个电脑里各自安装了虚 ...

  4. FastDFS:Java客户都实现文件的上传、下载、修改、删除

    FastDFS:Java客户都实现文件的上传.下载.修改.删除 <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  5. 从FTP服务器进行文件的上传和下载

    .net 2.0(c#)下简单的FTP应用程序 本文使用.net 2.0(c#)来实现一般的FTP功能 介绍 微软的.net framework 2.0相对于1.x来说增加了对FTP的支持.以前为了符 ...

  6. 如何搭建FTP服务器实现文件的上传及下载?(亲测有效)

      FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP是File Transfer Protoc ...

  7. 模拟部署FTP服务器并提供文件的上传及下载

    FTP(File Transfer Protocol:文件传输协议)是TCP/IP协议组中的协议之一,主要是提供文件共享服务. 数据端口20:用于传输数据: 控制端口21:用于传输指令: 操作环境:V ...

  8. filezilla:阿里云 win10 服务器文件传输(上传和下载)的配置教程

    报错截图: (截图省略)因为基本上都是下面的问题. 下面的问题又和本文解决办法无关,罗列出来仅仅是告诉大家,这个基本上都可以忽视. 真正解决问题的办法:还是filezillad 远程链接时的定义设置选 ...

  9. 【避坑】minio临时凭证STS实现上传,下载

    一.背景 以minio作为图床,采用用户到minio服务器的点对点使用方式,将上传用户的长期凭证放在客户端(app或者web端)带来极大的风险.通常通过临时凭证STS签名的方式实现.简单的逻辑关系图如 ...

最新文章

  1. 35 岁前程序员要规划好的四件事(转载)
  2. 图形界面报错“已拒绝X11转移申请”的解决方法
  3. [C#] C# 知识回顾 - 装箱与拆箱
  4. java 注解数组初始化_Java 之 注解的定义
  5. 基于汇编语言及Proteus仿真的CPU8086水库水位监视系统
  6. flume消费kafka数据太慢_kafka补充01
  7. android meminfo,Android中dumpsys meminfo与/proc/meminfo获取空闲内存不一致的问题
  8. jsp地址栏传中文显示乱码解决方法
  9. (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
  10. Linux常用编程工具
  11. unity VR中制作小地图的方法
  12. 如何制作动态拼图?教你如何在线拼接动图
  13. 微信小程序幻灯片效果实现
  14. 学C语言和C++它有毛关系吗?
  15. 李元佳:漫谈 Greenplum 开源背后的动机
  16. 强哥语录摘抄(郑强教授)
  17. 《满城黄金甲》另类观后感
  18. 实验一:绘制任意斜率的直线段
  19. Android实现图片压缩并上传到服务器
  20. 2017年度个人计划

热门文章

  1. 腾讯私有云TStack 自动化部署
  2. 推荐一款有趣的APP-种子习惯
  3. 雷军《小米创业思考》读书笔记
  4. 计算机excel还原,3种方法找回电脑上已删除的Excel文档
  5. 那些年,我开发过的软件
  6. SQL 2008 -数据库的创建与管理
  7. vue 页面动态分屏
  8. Oracle 12c 数据库可插拔体系结构
  9. 计算机表格公开课,Word表格制作教案公开课
  10. 程序员用代码求救, 同事“秒懂”