日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/1/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 minio服务器在win10的上传与下载,以及修改头像Minio速看免费本地文件服务器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先自己配置Minio服務(wù)器 和客戶端 請點(diǎn)擊 官網(wǎng)地址http://www.minio.org.cn

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

我是用Spring boot 配置 首先導(dǎo)入 Minio Dependency配置

<!-- minio服務(wù)器--><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服務(wù)器配置endpoint: http://127.0.0.1:9002 //Minio服務(wù)器端口#minio服務(wù)器配置賬號accessKey: 自己配置的賬號#minio服務(wù)器配置密碼secretKey: 自己配置的密碼#minio服務(wù)器桶bucketName: 自己設(shè)置的桶名

我的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服務(wù)器所有的結(jié)果集** @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/{參數(shù)值}數(shù)據(jù)。// @RequestParam主要用于接收http://host:port/path?參數(shù)名=參數(shù)值數(shù)據(jù).@ApiOperation("文件下載")@GetMapping(value = "/minioDownload/{fileName}", produces = "application/octet-stream")public void downLoad(HttpServletResponse response, @PathVariable("fileName") String fileName) {InputStream in = null;try {//根據(jù)文件名獲得對象StatObjectResponse stat = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());response.setContentType(stat.contentType());//設(shè)置瀏覽器鏈接 下載文件response.setHeader("content-type", "application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//根據(jù)對象 --> 文件下載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做的管理
自己根據(jù)導(dǎo)入的jar包 去官方文檔 Minioclient 去使用具體的方法
SDK方法區(qū):(自己看)
鏈接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="請輸入文件名進(jìn)行搜索..."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: '導(dǎo)入文件',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 = '文件導(dǎo)入失敗';this.importDataBtnIcon = 'el-icon-upload3';this.importDataDisabled = false;},onSuccess() {this.importDataBtnText = '文件導(dǎo)入成功';this.importDataBtnIcon = 'el-icon-upload2';this.importDataDisabled = false;this.MinioList();},beforeUpload() {this.importDataBtnText = '正在導(dǎo)入';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
接下來是: 保存服務(wù)器文件并生成網(wǎng)絡(luò)路徑 存放在在Mysql 當(dāng)中 和修改頭像功能

修改管理員的頭像 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 : 個(gè)人中心* @since :1.0.0*/ @RestController public class AdminInfoController {@Autowiredprivate IAdminService adminService;@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;/*** 更新用戶當(dāng)前信息* @param admin 用戶信息* @param authentication 登陸的當(dāng)前用戶* @return*/@ApiOperation(value = "更新用戶當(dāng)前信息")@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 單個(gè)文件* @param id 用戶ID* @param authentication 當(dāng)前用戶* @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("更新失敗!");} 頭像在數(shù)據(jù)庫只能保存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 所做的操作
下面是我的數(shù)據(jù)庫:
varchar 255不夠 生成的圖片鏈接用400即可.
《 !!這是我生成的本地圖片地址 以為我沒買服務(wù)器嘻嘻。
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

謝謝大嘎 全是干貨 點(diǎn)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

總結(jié)

以上是生活随笔為你收集整理的minio服务器在win10的上传与下载,以及修改头像Minio速看免费本地文件服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。