minio服务器在win10的上传与下载,以及修改头像Minio速看免费本地文件服务器
首先自己配置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
展示圖:
這是我簡單的就是文件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速看免费本地文件服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA自定义信件消息模板内容
- 下一篇: 在python终端中打印颜色的3中方式(