既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
import com.cloud.photo.common.common.CommonEnum;
import com.cloud.photo.common.common.ResultBody;
import com.cloud.photo.common.constant.CommonConstant;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.regex.Pattern;
@Service
public class LoginServiceImpl implements LoginService {
@Resource
private UserFeignService userFeignService;
@Override
//获得用户信息,先从缓存获取,没有则创建缓存
public ResultBody getUserInfo() {
if (StpUtil.isLogin()) {
//用户登录ID
String loginId = StpUtil.getLoginIdAsString();
//如果session里面有信息优先从里面拿
SaSession session = StpUtil.getSessionByLoginId(loginId);
if (session != null) {
String userInfo = session.getModel(CommonConstant.USER_INFO, String.class);
if (userInfo != null) {
return ResultBody.success(JSON.parseObject(userInfo, UserBo.class));
}
}
//否则访问user服务获取用户信息
ResultBody userInfo = userFeignService.getUserInfo(loginId);
if (userInfo.getCode().equals(CommonEnum.SUCCESS.getResultCode())){
//成功拿到用户信息就存缓存里面,true是有的话就存,没有的话就新建
SaSession saSession = StpUtil.getSessionByLoginId(loginId, true);
saSession.set(CommonConstant.USER_INFO, JSON.toJSONString(userInfo.getData()));
}
return userInfo;
}
//未登录
return ResultBody.error(CommonEnum.NO_LOGIN);
}
}
### (4)图片上传
此部分未项目重点,请做好笔记!!以下我将介绍整个图片上传流程
**使用步骤**
在父工程导入依赖,部分依赖上面已经导入,这里仅展示未导入的
<!-- kafka-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<!-- hutool工具-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<!-- 上传图片需要用到-->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.12.487</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.487</version>
</dependency>
图片上传流程分为两步:获取上传地址和提交上传记录
#### 获取上传地址
1.这是获取上传地址接口,这里把用户id放入FileUploadBo就进入putuploadService业务层代码。前端传过来FileUploadBo 包括category图片分类,fileName文件名,fileSize图片大小,fileMd5图片的md5值。
@Autowired
PutuploadService putuploadService;
/**
* 获取上传地址
*
* @return 每一张图片一个上传地址
*/
@SaCheckLogin
@PostMapping("getPutUploadUrl")
public ResultBody getPutUploadUrl(@RequestBody FileUploadBo bo) {
//从缓存拿到用户信息
UserBo userInfo = MyUtils.getUserInfo();
if (userInfo == null) {
return ResultBody.error(CommonEnum.USER_IS_NULL);
}
//用户ID
String userId = userInfo.getUserId();
//判断下上传的文件是否为空
if (bo == null) {
return ResultBody.error(CommonEnum.FILE_LIST_IS_NULL);
}
//拼接用户ID
bo.setUserId(userId);
// 业务实现
return putuploadService.getPutUploadUrl(bo);
}
2.我们先看trans服务里的代码,因为putuploadService需要远程调用它。首先根据图片的md5值来查询是否有相同的图片已经上传过,这样的话就可以节省资源。如果图片已存在则称为秒传。如果图片存在的话我们直接返回storageObjectId(图片的存储id,这是数据库的主键)即可,因为图片已经上传过了,已经不需要拿他的上传地址了。如果图片不存在则需要进行图片上传,调用S3Util来进行上传,然后返回S3Util生成的返回值,重点是图片上传地址。
\*\*\*注意,秒传和非秒传返回值是不同的\*\*\*
@Autowired
IFileMd5Service iFileService;
public String getPutUploadUrl(String fileName, String fileMd5, Long fileSize) {
//文件已存在 进行秒传 直接将存储id返回
FileMd5 fileMd5Entity = iFileService.getOne(new QueryWrapper<FileMd5>().eq("md5", fileMd5));
if (fileMd5Entity != null) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("storageObjectId", fileMd5Entity.getStorageObjectId());
return jsonObject.toJSONString();
}
//文件不存在
String suffixName = "";
if (StringUtils.isNotBlank(fileName)) {//检查fileName为不为空
suffixName = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}
return S3Util.getPutUploadUrl(suffixName, fileMd5);//上传图片,返回上传信息
}
3.然后我们看看S3Util的代码。主要就是把图片上传到Minio,也可以选择服务商的桶服务存储,原理是差不多的,我选择的是Minio。原理就是先建立连接然后将文件的md5转换为base64上传到Minio存储,然后返回上传信息。这里的代码会用即可。
package com.cloud.photo.common.util;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject;
import com.amazonaws.HttpMethod;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import io.micrometer.core.instrument.util.StringUtils;
import org.apache.tomcat.util.buf.HexUtils;
import java.io.;
import java.net.URL;
import java.net.URLEncoder;
import java.util.;
public class S3Util {
private static String accessKey = "minioadmin";
private static String secretKey = "minioadmin";
private static String bucketName = "cloud-photo";
private static String serviceEndpoint = "http://127.0.0.1:9000";
private static String containerId = "10001";
/**
* 获取上传地址
* @param suffixName
* @param fileMd5
* @return
*/
public static String getPutUploadUrl(St