Kaynağa Gözat

用户头像上传到oss,头像查询根据路径临时图片

lizhenhao 2 yıl önce
ebeveyn
işleme
b6f5982608

+ 44 - 9
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/controller/UserController.java

@@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.model.PutObjectResult;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -55,6 +56,7 @@ import javax.validation.Validator;
 import javax.validation.constraints.NotNull;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -99,6 +101,10 @@ public class UserController {
     @ApiOperation(value = "查询用户")
     public ResponseEntity queryById(@RequestParam("id") String id) {
         UserDTO userDTO = userService.get ( id );
+        if (ObjectUtil.isNotEmpty(userDTO) && StringUtils.isNotBlank(userDTO.getPhoto())) {
+            String lsUrl = UserUtils.getLsUrl(userDTO.getPhoto());
+            userDTO.setPhoto(lsUrl);
+        }
         if(StringUtils.isNotBlank(userDTO.getManageOfficeIds())){
             //获取当前人管理的部门id
             List<String> manageOfficeIdList=Arrays.asList(userDTO.getManageOfficeIds().split(","));
@@ -493,15 +499,16 @@ public class UserController {
         if ( !file.isEmpty ( ) ) {
             if ( fileProperties.isImage ( file.getOriginalFilename ( ) ) ) {
                 // 文件保存路径
-                String realPath = FileKit.getAttachmentDir ( ) + "sys/user/images/";
-                // 转存文件
-                FileUtils.createDirectory ( realPath );
-                file.transferTo ( new File ( realPath + file.getOriginalFilename ( ) ) );
-                User user = new User ( userId );
-                user.setPhoto ( FileKit.getAttachmentUrl ( ) + "sys/user/images/" + file.getOriginalFilename ( ) );
-                userService.updateById ( user );
-                UserUtils.deleteCache ( UserUtils.getCurrentUserDTO ( ) );
-                return ResponseUtil.newInstance ( ).add ( "path", FileKit.getAttachmentUrl ( ) + "sys/user/images/" + file.getOriginalFilename ( ) ).ok ( "上传成功!" );
+                String realPath = "attachment-file"+"/"+"user_avatar"+this.datePath()+"/"+ System.currentTimeMillis();
+                //文件原名称
+                String newName = file.getOriginalFilename();
+                this.uploadFile(file.getInputStream(),realPath,newName); // 文件上传到oss
+                String filePath = realPath + newName;
+                userService.updateAvatarById ( userId,filePath ); // 修改头像
+                String url = aliyunUrl + "/" + realPath + newName;
+                String lsUrl = UserUtils.getLsUrl(url); // 获取头像临时地址
+                // 获取临时头像地址
+                return ResponseUtil.newInstance ( ).add ( "path", lsUrl ).ok ( "上传成功!" );
             } else {
                 return ResponseEntity.badRequest ( ).body ( "请上传图片!" );
             }
@@ -779,4 +786,32 @@ public class UserController {
         Boolean updatePassword = userService.isUpdatePassword(userDTO.getId());
         return ResponseEntity.ok(updatePassword);
     }
+
+    public String uploadFile(InputStream inStream, String fileDir, String fileName) {
+        //初始化OSSClient
+        OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
+//        long start = System.currentTimeMillis();
+        //上传文件
+        PutObjectResult putResult = ossClient.putObject(bucketName, fileDir + fileName, inStream);
+        String ret = putResult.getETag();
+
+        try {
+            if (inStream != null) {
+                inStream.close();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+//        long end = System.currentTimeMillis();
+//        log.info("上传文件到云服务器成功,文件名:{},耗时:{}ms",fileName,end-start);
+        return ret;
+    }
+    public String datePath(){
+        Calendar date = Calendar.getInstance();
+        String year = String.valueOf(date.get(Calendar.YEAR));
+        String month = String.valueOf(date.get(Calendar.MONTH)+1);
+        String day = String.valueOf(date.get(Calendar.DAY_OF_MONTH));
+        String path = "/"+year+"/"+month+"/"+day;
+        return path;
+    }
 }

+ 7 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/mapper/UserMapper.java

@@ -227,4 +227,11 @@ public interface UserMapper extends BaseMapper<User> {
      * 根据岗位id获取用户
      */
     List<User> getUserByPost(String postId);
+
+    /**
+     * 根据用户id修改头像
+      * @param userId
+     * @param filePath
+     */
+    void updateAvatarById(String userId,String filePath);
 }

+ 4 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/mapper/xml/UserMapper.xml

@@ -400,4 +400,8 @@
 		left join sys_user u on u.id = sup.user_id and u.del_flag = 0
 		where sup.post_id = #{postId}
 	</select>
+
+	<update id="updateAvatarById">
+		update sys_user set photo = #{filePath} where id = #{userId}
+	</update>
 </mapper>

+ 5 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/service/UserService.java

@@ -557,4 +557,9 @@ public class UserService  extends ServiceImpl<UserMapper, User> {
 	public List<User> getUserIdByPost(String postId) {
 		return userMapper.getUserByPost(postId);
 	}
+
+	// 根据用户id修改头像
+	public void updateAvatarById(String userId,String filePath) {
+		userMapper.updateAvatarById(userId, filePath);
+	}
 }

+ 45 - 4
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/utils/UserUtils.java

@@ -3,8 +3,10 @@
  */
 package com.jeeplus.sys.utils;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.aliyun.oss.OSSClient;
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.redis.RedisUtils;
@@ -20,13 +22,11 @@ import com.jeeplus.sys.service.UserService;
 import com.jeeplus.sys.service.dto.*;
 import com.jeeplus.sys.service.mapstruct.MenuWrapper;
 import com.jeeplus.sys.sms.SMSUtils;
+import org.springframework.beans.factory.annotation.Value;
 
 import javax.validation.constraints.NotNull;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 用户工具类
@@ -61,9 +61,50 @@ public class UserUtils {
 	@InterceptorIgnore
 	public static UserDTO getByLoginName(String loginName){
 		UserDTO userDTO = SpringUtil.getBean(UserService.class).getUserByLoginName ( loginName );
+		if (ObjectUtil.isNotEmpty(userDTO) && StringUtils.isNotBlank(userDTO.getPhoto())) {
+			String lsUrl = getLsUrl(userDTO.getPhoto());
+			userDTO.setPhoto(lsUrl);
+		}
 		return userDTO;
 	}
 
+	private static final String aliyunUrl = "http://oss.gangwaninfo.com";
+	private static final String aliyunDownloadUrl = "http://cdn.gangwaninfo.com";
+	private static final String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
+	private static final String accessKeyId = "LTAI5tQDWoM9c1WyJNPs86rX";
+	private static final String accessKeySecret = "84dDIx4edT1n78KUOqqSmDZ35pchJv";
+	private static final String bucketName = "xgxm-test";
+
+	/**
+	 * 根据oss文件路径获取临时文件
+	 * @param url
+	 * @return
+	 */
+	public static String getLsUrl(String url) {
+		url = url.replace("amp;","");
+		String cons = "";
+		if (url.contains(aliyunUrl)){
+			cons = aliyunUrl;
+		}else if (url.contains("http://gangwan-app.oss-cn-hangzhou.aliyuncs.com")){
+			cons = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com";
+		}else {
+			cons = aliyunDownloadUrl;
+		}
+		String key = "";
+		String[] split = url.split(cons + "/");
+		if(split.length>1){
+			key = split[1];
+		}else{
+			key = url;
+		}
+		// 指定过期时间为24小时。
+		Date expiration = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 );
+		//初始化OSSClient
+		OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
+		String lsUrl = ossClient.generatePresignedUrl(bucketName, key, expiration).toString();
+		return lsUrl;
+	}
+
 	/**
 	 * 根据用户名获取用户
 	 * @param name