@@ -26,6 +28,8 @@ import org.springframework.web.bind.annotation.RestController; public class UserController { @Autowired AddressService addressService; + @Autowired + FileService fileService; @ApiOperation("根据id查询地址详情") @GetMapping("detail/{address_id}") @@ -35,5 +39,22 @@ public class UserController { return addressService.detail(id); } + /** + * 用户头像上传 + * 默认最大1M,超过报错 + * + * @return + */ + @ApiOperation("用户头像上传") + @PostMapping(value = "upload") + public JsonData uploadUserImg( + @ApiParam(value = "文件上传", required = true) + @RequestPart("file") MultipartFile file) throws IOException { + String result = fileService.uploadUserHeadImg(file); + + return result!=null?JsonData.buildSuccess(result):JsonData.buildResult(BizCodeEnum.FILE_UPLOAD_USER_IMG_FAIL); + } + + } diff --git a/xdclass-user-service/src/main/java/net/jieyuu/service/FileService.java b/xdclass-user-service/src/main/java/net/jieyuu/service/FileService.java new file mode 100644 index 0000000..45cd9bc --- /dev/null +++ b/xdclass-user-service/src/main/java/net/jieyuu/service/FileService.java @@ -0,0 +1,11 @@ +package net.jieyuu.service; + + +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +public interface FileService { + public String uploadUserHeadImg(MultipartFile file) throws IOException; + +} diff --git a/xdclass-user-service/src/main/java/net/jieyuu/service/MailService.java b/xdclass-user-service/src/main/java/net/jieyuu/service/MailService.java deleted file mode 100644 index e46548c..0000000 --- a/xdclass-user-service/src/main/java/net/jieyuu/service/MailService.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.jieyuu.service; - - -/** - *
- * 邮件发送类 - *
- * - * @author jieyuu - * @since 2024-02-12 - */ -public interface MailService { - - /** - * 发送邮件 - * @param to - * @param subject - * @param content - */ - public void sendMail(String to, String subject, String content); -} diff --git a/xdclass-user-service/src/main/java/net/jieyuu/service/impl/FileServiceImpl.java b/xdclass-user-service/src/main/java/net/jieyuu/service/impl/FileServiceImpl.java new file mode 100644 index 0000000..82687d9 --- /dev/null +++ b/xdclass-user-service/src/main/java/net/jieyuu/service/impl/FileServiceImpl.java @@ -0,0 +1,62 @@ +package net.jieyuu.service.impl; + +import io.minio.*; +import lombok.extern.slf4j.Slf4j; +import net.jieyuu.service.FileService; +import net.jieyuu.utils.CommonUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + + +@Slf4j +@Service +public class FileServiceImpl implements FileService { + + @Autowired + private MinioClient minioClient; + + @Value("${minio.bucketName}") + private String bucketName; + @Value("${minio.endpoint}") + private String endpoint; + + @Override + public String uploadUserHeadImg(MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + + LocalDateTime localDateTime = LocalDateTime.now(); + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + String folder = dateTimeFormatter.format(localDateTime); + + String fileName = CommonUtil.generateUUID(); + String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); + String newFileName = "user/" + folder + "/" + fileName + extension; + + + try (InputStream in = file.getInputStream();){ + + ObjectWriteResponse objectWriteResponse = minioClient.putObject(PutObjectArgs.builder() + .bucket(bucketName) + .object(newFileName) + .stream(in, in.available(), -1) + .contentType(file.getContentType()) + .build() + ); + if (objectWriteResponse != null) { + String res = endpoint + "/" + bucketName + "/" + newFileName; + return res; + } + } catch (Exception e) { + log.error("上传头像失败:{}", e); + } + return null; + } +} \ No newline at end of file diff --git a/xdclass-user-service/src/main/java/net/jieyuu/service/impl/MailServiceImpl.java b/xdclass-user-service/src/main/java/net/jieyuu/service/impl/MailServiceImpl.java deleted file mode 100644 index ab2bd78..0000000 --- a/xdclass-user-service/src/main/java/net/jieyuu/service/impl/MailServiceImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.jieyuu.service.impl; - - -import lombok.extern.slf4j.Slf4j; -import net.jieyuu.service.MailService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.mail.SimpleMailMessage; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.stereotype.Service; - -@Service -@Slf4j -public class MailServiceImpl implements MailService { - - /** - * Spring Boot 提供了一个发送邮件的简单抽象,直接注入即可使用 - */ - @Autowired - private JavaMailSender mailSender; - - /** - * 配置文件中的发送邮箱 - */ - @Value("${spring.mail.from}") - private String from; - - @Override - public void sendMail(String to, String subject, String content) { - //创建SimpleMailMessage对象 - SimpleMailMessage message = new SimpleMailMessage(); - //邮件发送人 - message.setFrom(from); - //邮件接收人 - message.setTo(to); - //邮件主题 - message.setSubject(subject); - //邮件内容 - message.setText(content); - //发送邮件 - mailSender.send(message); - log.info("邮件发成功:{}", message.toString()); - } -} \ No newline at end of file diff --git a/xdclass-user-service/src/main/java/net/jieyuu/service/impl/NotifyServiceImpl.java b/xdclass-user-service/src/main/java/net/jieyuu/service/impl/NotifyServiceImpl.java index a74de65..5119e9e 100644 --- a/xdclass-user-service/src/main/java/net/jieyuu/service/impl/NotifyServiceImpl.java +++ b/xdclass-user-service/src/main/java/net/jieyuu/service/impl/NotifyServiceImpl.java @@ -1,8 +1,8 @@ package net.jieyuu.service.impl; import lombok.extern.slf4j.Slf4j; +import net.jieyuu.component.MailService; import net.jieyuu.enums.SendCodeEnum; -import net.jieyuu.service.MailService; import net.jieyuu.service.NotifyService; import net.jieyuu.utils.CheckUtil; import net.jieyuu.utils.CommonUtil; @@ -11,8 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import javax.security.auth.Subject; - @Slf4j @Service public class NotifyServiceImpl implements NotifyService { diff --git a/xdclass-user-service/src/main/resources/application.yml b/xdclass-user-service/src/main/resources/application.yml index 5f143e9..735e427 100644 --- a/xdclass-user-service/src/main/resources/application.yml +++ b/xdclass-user-service/src/main/resources/application.yml @@ -36,4 +36,13 @@ mybatis-plus: #设置日志级别,ERROR/WARN/INFO/DEBUG,默认是INFO以上才显示 logging: level: - root: INFO \ No newline at end of file + root: INFO + + +minio: + endpoint: http://134.175.219.253:9000 + access-key-id: Y7sQYzzcBob67Wu7agLK + access-key-secret: PXT1QKl0U23VMMKPmCbDZvGaJiw23AhQWpd4RlO9 + bucketName: xdclass-shop-image + + diff --git a/xdclass-user-service/src/test/java/net/jieyuu/biz/MailTest.java b/xdclass-user-service/src/test/java/net/jieyuu/biz/MailTest.java index e029f5d..d3251c6 100644 --- a/xdclass-user-service/src/test/java/net/jieyuu/biz/MailTest.java +++ b/xdclass-user-service/src/test/java/net/jieyuu/biz/MailTest.java @@ -2,7 +2,7 @@ package net.jieyuu.biz; import lombok.extern.slf4j.Slf4j; import net.jieyuu.UserServiceApplication; -import net.jieyuu.service.MailService; +import net.jieyuu.component.MailService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired;