From 2bce229a7b0eb352dd6d7c345c9cd13cc61ba2fd Mon Sep 17 00:00:00 2001 From: xd <844539747@qq.com> Date: Thu, 21 Mar 2024 16:52:36 +0800 Subject: [PATCH] '123' --- .../controller/common/CommonController.java | 8 +-- .../system/SysProfileController.java | 9 ++- .../src/main/resources/application.yml | 4 +- .../common/utils/file/FileUploadUtils.java | 57 ++++++++++--------- .../ruoyi/common/utils/file/MinioUtil.java | 23 ++++---- ruoyi-ui/src/store/modules/user.js | 3 +- .../views/system/user/profile/userAvatar.vue | 3 +- 7 files changed, 58 insertions(+), 49 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java index 82614c8..6def5d9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -26,7 +26,7 @@ import com.ruoyi.framework.config.ServerConfig; /** * 通用请求处理 - * + * * @author ruoyi */ @RestController @@ -42,7 +42,7 @@ public class CommonController /** * 通用下载请求 - * + * * @param fileName 文件名称 * @param delete 是否删除 */ @@ -168,7 +168,7 @@ public class CommonController * Minio 服务器上传请求(单文件上传) */ @PostMapping("/minio-upload") - public AjaxResult uploadFileMinio(MultipartFile file) throws Exception + public AjaxResult uploadFileMinio(String dir,MultipartFile file) throws Exception { if(file == null){ return AjaxResult.error("不能上传空文件"); @@ -176,7 +176,7 @@ public class CommonController try { // 上传并返回新文件名称 - String fileName = FileUploadUtils.uploadMinio(file); + String fileName = FileUploadUtils.uploadMinio(dir,file); AjaxResult ajax = AjaxResult.success(); ajax.put("url", fileName); ajax.put("fileName", fileName); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java index 08c2bf1..d60384a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.system; +import com.ruoyi.system.service.ISysConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -29,13 +30,16 @@ import java.util.regex.Pattern; /** * 个人信息 业务处理 - * + * * @author ruoyi */ @RestController @RequestMapping("/system/user/profile") public class SysProfileController extends BaseController { + @Autowired + private ISysConfigService configService; + @Autowired private ISysUserService userService; @@ -132,7 +136,8 @@ public class SysProfileController extends BaseController if (!file.isEmpty()) { LoginUser loginUser = getLoginUser(); - String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); + //String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); + String avatar = FileUploadUtils.uploadMinio("user",file); if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) { AjaxResult ajax = AjaxResult.success(); diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index a5e79ee..7f97f81 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -201,10 +201,10 @@ magic-api: # Minio配置-分布式存储 minio: useEnable: true - url: http://localhost:3336 + url: http://192.168.9.134:3336 accessKey: minio-admin secretKey: minio-jndlitzx - bucketName: jndl + bucketName: system # OA单点登录key OA: diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java index 4ab935c..14a44f2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -37,7 +37,7 @@ public class FileUploadUtils * 本地默认上传的地址 */ private static String defaultBaseDir = RuoYiConfig.getProfile(); - + /** * Minio默认上传的地址 */ @@ -52,7 +52,7 @@ public class FileUploadUtils { return defaultBaseDir; } - + public static String getBucketName() { return BUCKET_NAME; @@ -129,34 +129,16 @@ public class FileUploadUtils /** * 以默认BucketName配置上传到Minio服务器 * + * @param dir 分类目录 * @param file 上传的文件 * @return 文件名称 * @throws IOException 写入异常 */ - public static String uploadMinio(MultipartFile file) throws IOException + public static String uploadMinio(String dir,MultipartFile file) throws IOException { try { - return uploadMinio(getBucketName(), file); - } - catch (Exception e) - { - throw new IOException(e.getMessage(), e); - } - } - - /** - * 自定义bucketName配置上传到Minio服务器 - * - * @param file 上传的文件 - * @return 文件名称 - * @throws IOException 写入异常 - */ - public static String uploadMinio(MultipartFile file, String bucketName) throws IOException - { - try - { - return uploadMinio(bucketName, file); + return uploadMinio(getBucketName(),dir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); } catch (Exception e) { @@ -164,18 +146,37 @@ public class FileUploadUtils } } - private static String uploadMinio(String bucketName, MultipartFile file) throws Exception + /** + * 自定义bucketName配置上传到Minio服务器 + * + * @param file 上传的文件 + * @return 文件名称 + * @throws IOException 写入异常 + */ + public static String uploadMinio(MultipartFile file, String bucketName,String dir) throws IOException + { + try + { + return uploadMinio(bucketName,dir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + private static String uploadMinio(String bucketName, String dir, MultipartFile file, String[] allowedExtension) throws Exception { int fileNameLength = file.getOriginalFilename().length(); if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); } - assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + assertAllowed(file, allowedExtension); try { String fileName = extractFilename(file); - return MinioUtil.uploadFile(bucketName, fileName, file); + return MinioUtil.uploadFile(bucketName,dir, fileName, file); } catch (Exception e) { @@ -276,7 +277,7 @@ public class FileUploadUtils /** * 获取文件名的后缀 - * + * * @param file 表单文件 * @return 后缀名 */ @@ -289,4 +290,4 @@ public class FileUploadUtils } return extension; } -} \ No newline at end of file +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtil.java index 50dd564..5829a0f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtil.java @@ -1,9 +1,6 @@ package com.ruoyi.common.utils.file; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; +import java.io.*; import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; @@ -27,7 +24,7 @@ import io.minio.http.Method; /** * Minio 文件存储工具类 - * + * * @author ruoyi */ public class MinioUtil @@ -38,19 +35,23 @@ public class MinioUtil /** * 上传文件 - * + * * @param bucketName 桶名称 + * @param dir 分类目录 * @param fileName 文件名 * @throws IOException 写入异常 */ - public static String uploadFile(String bucketName, String fileName, MultipartFile multipartFile) throws IOException + public static String uploadFile(String bucketName,String dir, String fileName, MultipartFile multipartFile) throws IOException { - + String url = ""; try (InputStream inputStream = multipartFile.getInputStream()) { - MINIO_CLIENT.putObject(PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(inputStream, multipartFile.getSize(), -1).contentType(multipartFile.getContentType()).build()); - String url = MINIO_CLIENT.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(fileName).method(Method.GET).build()); - url = url.substring(0, url.indexOf('?')); + boolean exist = existBucket(bucketName); + if(exist){ + MINIO_CLIENT.putObject(PutObjectArgs.builder().bucket(bucketName).object(dir+"/"+fileName).stream(inputStream, multipartFile.getSize(), -1).contentType(multipartFile.getContentType()).build()); + url = MINIO_CLIENT.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(dir+"/"+fileName).method(Method.GET).build()); + url = url.substring(0, url.indexOf('?')); + } return ServletUtils.urlDecode(url); } catch (Exception e) diff --git a/ruoyi-ui/src/store/modules/user.js b/ruoyi-ui/src/store/modules/user.js index 807704a..381bc38 100644 --- a/ruoyi-ui/src/store/modules/user.js +++ b/ruoyi-ui/src/store/modules/user.js @@ -71,7 +71,8 @@ const user = { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.user - const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; + //const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; + const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar; if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', res.roles) commit('SET_PERMISSIONS', res.permissions) diff --git a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue index e2bfe40..d791072 100644 --- a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue +++ b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue @@ -137,7 +137,8 @@ export default { formData.append("avatarfile", data, this.options.filename); uploadAvatar(formData).then(response => { this.open = false; - this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl; + //this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl; + this.options.img = response.imgUrl; store.commit('SET_AVATAR', this.options.img); this.$modal.msgSuccess("修改成功"); this.visible = false;