Просмотр исходного кода

fix 修复 dubbo 传输文件问题 临时更改 后续对接oss

疯狂的狮子li 4 лет назад
Родитель
Сommit
4b5d0fac02

+ 1 - 2
ruoyi-api/ruoyi-api-file/src/main/java/com/ruoyi/file/api/RemoteFileService.java

@@ -1,7 +1,6 @@
 package com.ruoyi.file.api;
 
 import com.ruoyi.file.api.domain.SysFile;
-import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 文件服务
@@ -16,5 +15,5 @@ public interface RemoteFileService {
      * @param file 文件信息
      * @return 结果
      */
-    SysFile upload(MultipartFile file);
+    SysFile upload(String name, String originalFilename, String contentType, byte[] file);
 }

+ 6 - 1
ruoyi-api/ruoyi-api-file/src/main/java/com/ruoyi/file/api/domain/SysFile.java

@@ -4,6 +4,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+
 /**
  * 文件信息
  *
@@ -12,7 +14,10 @@ import lombok.experimental.Accessors;
 @Data
 @NoArgsConstructor
 @Accessors(chain = true)
-public class SysFile {
+public class SysFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
     /**
      * 文件名称
      */

+ 58 - 3
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/dubbo/RemoteFileServiceImpl.java

@@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.*;
+
 /**
  * 文件请求处理
  *
@@ -28,10 +30,11 @@ public class RemoteFileServiceImpl implements RemoteFileService {
      * 文件上传请求
      */
     @Override
-    public SysFile upload(MultipartFile file) {
+    public SysFile upload(String name, String originalFilename, String contentType, byte[] file) {
+        MultipartFile multipartFile = getMultipartFile(name, originalFilename, contentType, file);
         try {
             // 上传并返回访问地址
-            String url = sysFileService.uploadFile(file);
+            String url = sysFileService.uploadFile(multipartFile);
             SysFile sysFile = new SysFile();
             sysFile.setName(FileUtils.getName(url));
             sysFile.setUrl(url);
@@ -41,4 +44,56 @@ public class RemoteFileServiceImpl implements RemoteFileService {
             throw new ServiceException("上传文件失败");
         }
     }
-}
+
+    private MultipartFile getMultipartFile(String name, String originalFilename, String contentType, byte[] file) {
+        return new MultipartFile() {
+            @Override
+            public String getName() {
+                return name;
+            }
+
+            @Override
+            public String getOriginalFilename() {
+                return originalFilename;
+            }
+
+            @Override
+            public String getContentType() {
+                return contentType;
+            }
+
+            @Override
+            public boolean isEmpty() {
+                return getSize() == 0;
+            }
+
+            @Override
+            public long getSize() {
+                return file.length;
+            }
+
+            @Override
+            public byte[] getBytes() throws IOException {
+                return file;
+            }
+
+            @Override
+            public InputStream getInputStream() throws IOException {
+                return new ByteArrayInputStream(file);
+            }
+
+            @Override
+            public void transferTo(File dest) throws IOException, IllegalStateException {
+                OutputStream outputStream = null;
+                try {
+                    outputStream = new FileOutputStream(dest);
+                    outputStream.write(file);
+                } finally {
+                    if (outputStream != null) {
+                        outputStream.close();
+                    }
+                }
+            }
+        };
+    }
+}

+ 132 - 132
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java

@@ -1,132 +1,132 @@
-package com.ruoyi.system.controller;
-
-import com.ruoyi.common.core.constant.UserConstants;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.web.controller.BaseController;
-import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.log.annotation.Log;
-import com.ruoyi.common.log.enums.BusinessType;
-import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.file.api.RemoteFileService;
-import com.ruoyi.file.api.domain.SysFile;
-import com.ruoyi.system.api.domain.SysUser;
-import com.ruoyi.system.api.model.LoginUser;
-import com.ruoyi.system.service.ISysUserService;
-import lombok.RequiredArgsConstructor;
-import org.apache.dubbo.config.annotation.DubboReference;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-
-/**
- * 个人信息 业务处理
- *
- * @author ruoyi
- */
-@RequiredArgsConstructor(onConstructor_ = @Autowired)
-@RestController
-@RequestMapping("/user/profile")
-public class SysProfileController extends BaseController {
-
-    private final ISysUserService userService;
-    private final TokenService tokenService;
-
-    @DubboReference
-    private RemoteFileService remoteFileService;
-
-    /**
-     * 个人信息
-     */
-    @GetMapping
-    public AjaxResult profile() {
-        String username = SecurityUtils.getUsername();
-        SysUser user = userService.selectUserByUserName(username);
-        AjaxResult ajax = AjaxResult.success(user);
-        ajax.put("roleGroup", userService.selectUserRoleGroup(username));
-        ajax.put("postGroup", userService.selectUserPostGroup(username));
-        return ajax;
-    }
-
-    /**
-     * 修改用户
-     */
-    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult updateProfile(@RequestBody SysUser user) {
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        SysUser sysUser = loginUser.getSysUser();
-        user.setUserName(sysUser.getUserName());
-        if (StringUtils.isNotEmpty(user.getPhonenumber())
-                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
-            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
-        } else if (StringUtils.isNotEmpty(user.getEmail())
-                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
-            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
-        }
-        user.setUserId(sysUser.getUserId());
-        user.setPassword(null);
-        if (userService.updateUserProfile(user) > 0) {
-            // 更新缓存用户信息
-            loginUser.getSysUser().setNickName(user.getNickName());
-            loginUser.getSysUser().setPhonenumber(user.getPhonenumber());
-            loginUser.getSysUser().setEmail(user.getEmail());
-            loginUser.getSysUser().setSex(user.getSex());
-            tokenService.setLoginUser(loginUser);
-            return AjaxResult.success();
-        }
-        return AjaxResult.error("修改个人信息异常,请联系管理员");
-    }
-
-    /**
-     * 重置密码
-     */
-    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
-    @PutMapping("/updatePwd")
-    public AjaxResult updatePwd(String oldPassword, String newPassword) {
-        String username = SecurityUtils.getUsername();
-        SysUser user = userService.selectUserByUserName(username);
-        String password = user.getPassword();
-        if (!SecurityUtils.matchesPassword(oldPassword, password)) {
-            return AjaxResult.error("修改密码失败,旧密码错误");
-        }
-        if (SecurityUtils.matchesPassword(newPassword, password)) {
-            return AjaxResult.error("新密码不能与旧密码相同");
-        }
-        if (userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) {
-            // 更新缓存用户密码
-            LoginUser loginUser = SecurityUtils.getLoginUser();
-            loginUser.getSysUser().setPassword(SecurityUtils.encryptPassword(newPassword));
-            tokenService.setLoginUser(loginUser);
-            return AjaxResult.success();
-        }
-        return AjaxResult.error("修改密码异常,请联系管理员");
-    }
-
-    /**
-     * 头像上传
-     */
-    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
-    @PostMapping("/avatar")
-    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException {
-        if (!file.isEmpty()) {
-            LoginUser loginUser = SecurityUtils.getLoginUser();
-            SysFile sysFile = remoteFileService.upload(file);
-            if (StringUtils.isNull(sysFile)) {
-                return AjaxResult.error("文件服务异常,请联系管理员");
-            }
-            String url = sysFile.getUrl();
-            if (userService.updateUserAvatar(loginUser.getUsername(), url)) {
-                AjaxResult ajax = AjaxResult.success();
-                ajax.put("imgUrl", url);
-                // 更新缓存用户头像
-                loginUser.getSysUser().setAvatar(url);
-                tokenService.setLoginUser(loginUser);
-                return ajax;
-            }
-        }
-        return AjaxResult.error("上传图片异常,请联系管理员");
-    }
-}
+package com.ruoyi.system.controller;
+
+import com.ruoyi.common.core.constant.UserConstants;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.file.api.RemoteFileService;
+import com.ruoyi.file.api.domain.SysFile;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.LoginUser;
+import com.ruoyi.system.service.ISysUserService;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * 个人信息 业务处理
+ *
+ * @author ruoyi
+ */
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/user/profile")
+public class SysProfileController extends BaseController {
+
+    private final ISysUserService userService;
+    private final TokenService tokenService;
+
+    @DubboReference
+    private RemoteFileService remoteFileService;
+
+    /**
+     * 个人信息
+     */
+    @GetMapping
+    public AjaxResult profile() {
+        String username = SecurityUtils.getUsername();
+        SysUser user = userService.selectUserByUserName(username);
+        AjaxResult ajax = AjaxResult.success(user);
+        ajax.put("roleGroup", userService.selectUserRoleGroup(username));
+        ajax.put("postGroup", userService.selectUserPostGroup(username));
+        return ajax;
+    }
+
+    /**
+     * 修改用户
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult updateProfile(@RequestBody SysUser user) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        SysUser sysUser = loginUser.getSysUser();
+        user.setUserName(sysUser.getUserName());
+        if (StringUtils.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        } else if (StringUtils.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setUserId(sysUser.getUserId());
+        user.setPassword(null);
+        if (userService.updateUserProfile(user) > 0) {
+            // 更新缓存用户信息
+            loginUser.getSysUser().setNickName(user.getNickName());
+            loginUser.getSysUser().setPhonenumber(user.getPhonenumber());
+            loginUser.getSysUser().setEmail(user.getEmail());
+            loginUser.getSysUser().setSex(user.getSex());
+            tokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改个人信息异常,请联系管理员");
+    }
+
+    /**
+     * 重置密码
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword) {
+        String username = SecurityUtils.getUsername();
+        SysUser user = userService.selectUserByUserName(username);
+        String password = user.getPassword();
+        if (!SecurityUtils.matchesPassword(oldPassword, password)) {
+            return AjaxResult.error("修改密码失败,旧密码错误");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password)) {
+            return AjaxResult.error("新密码不能与旧密码相同");
+        }
+        if (userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) {
+            // 更新缓存用户密码
+            LoginUser loginUser = SecurityUtils.getLoginUser();
+            loginUser.getSysUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            tokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改密码异常,请联系管理员");
+    }
+
+    /**
+     * 头像上传
+     */
+    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatar")
+    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException {
+        if (!file.isEmpty()) {
+            LoginUser loginUser = SecurityUtils.getLoginUser();
+            SysFile sysFile = remoteFileService.upload(file.getName(), file.getOriginalFilename(), file.getContentType(), file.getBytes());
+            if (StringUtils.isNull(sysFile)) {
+                return AjaxResult.error("文件服务异常,请联系管理员");
+            }
+            String url = sysFile.getUrl();
+            if (userService.updateUserAvatar(loginUser.getUsername(), url)) {
+                AjaxResult ajax = AjaxResult.success();
+                ajax.put("imgUrl", url);
+                // 更新缓存用户头像
+                loginUser.getSysUser().setAvatar(url);
+                tokenService.setLoginUser(loginUser);
+                return ajax;
+            }
+        }
+        return AjaxResult.error("上传图片异常,请联系管理员");
+    }
+}