From 97eb2e50407e1f240498cdea34a270cdfe1ef5c3 Mon Sep 17 00:00:00 2001 From: syruan <321359594@qq.com> Date: Tue, 2 Apr 2024 17:46:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=85=BE=E8=AE=AF=E4=BA=91cos=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=9C=8D=E5=8A=A1=EF=BC=8CLog?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sgzb/system/api/RemoteUserService.java | 12 +- .../sgzb/common/log/enums/BusinessType.java | 6 + sgzb-modules/sgzb-file/pom.xml | 9 +- .../file/config/ConstantPropertiesUtil.java | 41 +++++ .../bonus/sgzb/file/config/MinioConfig.java | 164 +++++++++--------- .../FileUploadTencentController.java | 41 +++++ .../service/FileUploadTencentService.java | 20 +++ .../service/FileUploadTencentServiceImpl.java | 77 ++++++++ .../file/service/MinioSysFileServiceImpl.java | 98 +++++------ .../src/main/resources/bootstrap.yml | 22 +++ 10 files changed, 352 insertions(+), 138 deletions(-) create mode 100644 sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/ConstantPropertiesUtil.java create mode 100644 sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/controller/FileUploadTencentController.java create mode 100644 sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentService.java create mode 100644 sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentServiceImpl.java diff --git a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/system/api/RemoteUserService.java b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/system/api/RemoteUserService.java index ab1f07ed..8655bfd7 100644 --- a/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/system/api/RemoteUserService.java +++ b/sgzb-api/sgzb-api-system/src/main/java/com/bonus/sgzb/system/api/RemoteUserService.java @@ -41,16 +41,16 @@ public interface RemoteUserService /** * 发送短信 - * @param phone - * @return + * @param phone 手机号码 + * @return 验证码 */ @PostMapping("/sms/codeLogin") public R sendCode(@RequestParam("phone") String phone); /** * 验证码校验 - * @param phone - * @param code + * @param phone 手机号 + * @param code 验证码 * @return */ @PostMapping("/sms/checkCode") @@ -58,8 +58,8 @@ public interface RemoteUserService /** * 验证码校验 - * @param phone - * @param msg + * @param phone 手机号 + * @param msg 内容 * @return */ @PostMapping("/sms/send") diff --git a/sgzb-common/sgzb-common-log/src/main/java/com/bonus/sgzb/common/log/enums/BusinessType.java b/sgzb-common/sgzb-common-log/src/main/java/com/bonus/sgzb/common/log/enums/BusinessType.java index 23219568..d381c6a8 100644 --- a/sgzb-common/sgzb-common-log/src/main/java/com/bonus/sgzb/common/log/enums/BusinessType.java +++ b/sgzb-common/sgzb-common-log/src/main/java/com/bonus/sgzb/common/log/enums/BusinessType.java @@ -56,8 +56,14 @@ public enum BusinessType * 清空数据 */ CLEAN, + /** * 查询 */ QUERY, + + /** + * 物资库存 + */ + MATERIAL } diff --git a/sgzb-modules/sgzb-file/pom.xml b/sgzb-modules/sgzb-file/pom.xml index 0bce2223..48e5e8c3 100644 --- a/sgzb-modules/sgzb-file/pom.xml +++ b/sgzb-modules/sgzb-file/pom.xml @@ -16,7 +16,14 @@ - + + + + com.qcloud + cos_api + 5.6.54 + + com.alibaba.cloud diff --git a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/ConstantPropertiesUtil.java b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/ConstantPropertiesUtil.java new file mode 100644 index 00000000..1b3acd11 --- /dev/null +++ b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/ConstantPropertiesUtil.java @@ -0,0 +1,41 @@ +package com.bonus.sgzb.file.config; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * Description: 腾讯云cos配置 + * + * @Author 阮世耀 + * @Create 2023/12/3 16:26 + * @Version 1.0 + */ +@Component +public class ConstantPropertiesUtil implements InitializingBean { + + @Value("${tencent.cos.file.region}") + private String region; + + @Value("${tencent.cos.file.secretid}") + private String secretId; + + @Value("${tencent.cos.file.secretkey}") + private String secretKey; + + @Value("${tencent.cos.file.bucketname}") + private String bucketName; + + public static String END_POINT; + public static String ACCESS_KEY_ID; + public static String ACCESS_KEY_SECRET; + public static String BUCKET_NAME; + + @Override + public void afterPropertiesSet() throws Exception { + END_POINT = region; + ACCESS_KEY_ID = secretId; + ACCESS_KEY_SECRET = secretKey; + BUCKET_NAME = bucketName; + } +} diff --git a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/MinioConfig.java b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/MinioConfig.java index 4555c278..7d51298f 100644 --- a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/MinioConfig.java +++ b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/config/MinioConfig.java @@ -1,82 +1,82 @@ -package com.bonus.sgzb.file.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import io.minio.MinioClient; - -/** - * Minio 配置信息 - * - * @author ruoyi - */ -@Configuration -@ConfigurationProperties(prefix = "minio") -public class MinioConfig -{ - /** - * 服务地址 - */ - private String url; - - /** - * 用户名 - */ - private String accessKey; - - /** - * 密码 - */ - private String secretKey; - - /** - * 存储桶名称 - */ - private String bucketName; - - public String getUrl() - { - return url; - } - - public void setUrl(String url) - { - this.url = url; - } - - public String getAccessKey() - { - return accessKey; - } - - public void setAccessKey(String accessKey) - { - this.accessKey = accessKey; - } - - public String getSecretKey() - { - return secretKey; - } - - public void setSecretKey(String secretKey) - { - this.secretKey = secretKey; - } - - public String getBucketName() - { - return bucketName; - } - - public void setBucketName(String bucketName) - { - this.bucketName = bucketName; - } - - @Bean - public MinioClient getMinioClient() - { - return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build(); - } -} +//package com.bonus.sgzb.file.config; +// +//import org.springframework.boot.context.properties.ConfigurationProperties; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import io.minio.MinioClient; +// +///** +// * Minio 配置信息 +// * +// * @author ruoyi +// */ +//@Configuration +//@ConfigurationProperties(prefix = "minio") +//public class MinioConfig +//{ +// /** +// * 服务地址 +// */ +// private String url; +// +// /** +// * 用户名 +// */ +// private String accessKey; +// +// /** +// * 密码 +// */ +// private String secretKey; +// +// /** +// * 存储桶名称 +// */ +// private String bucketName; +// +// public String getUrl() +// { +// return url; +// } +// +// public void setUrl(String url) +// { +// this.url = url; +// } +// +// public String getAccessKey() +// { +// return accessKey; +// } +// +// public void setAccessKey(String accessKey) +// { +// this.accessKey = accessKey; +// } +// +// public String getSecretKey() +// { +// return secretKey; +// } +// +// public void setSecretKey(String secretKey) +// { +// this.secretKey = secretKey; +// } +// +// public String getBucketName() +// { +// return bucketName; +// } +// +// public void setBucketName(String bucketName) +// { +// this.bucketName = bucketName; +// } +// +// @Bean +// public MinioClient getMinioClient() +// { +// return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build(); +// } +//} diff --git a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/controller/FileUploadTencentController.java b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/controller/FileUploadTencentController.java new file mode 100644 index 00000000..9044b5e1 --- /dev/null +++ b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/controller/FileUploadTencentController.java @@ -0,0 +1,41 @@ +package com.bonus.sgzb.file.controller; + +import com.bonus.sgzb.common.core.web.controller.BaseController; +import com.bonus.sgzb.common.core.web.domain.AjaxResult; +import com.bonus.sgzb.file.service.FileUploadTencentService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +/** + * Description: 腾讯云文件上传接口 + * + * @Author 阮世耀 + * @Create 2023/12/3 16:33 + * @Version 1.0 + */ +@Api(tags = "腾讯云文件上传接口") +@RestController +@RequestMapping("/tencent/cos") +public class FileUploadTencentController extends BaseController { + + @Resource + private FileUploadTencentService fileUploadTencentService; + + @ApiOperation(value = "文件上传") + @PostMapping("uploadFile") + public AjaxResult uploadFile( + @ApiParam(name = "file", value = "文件", required = true) + @RequestParam("file") MultipartFile file) { + String uploadUrl = fileUploadTencentService.uploadFile(file); + return success(uploadUrl); + } + +} diff --git a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentService.java b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentService.java new file mode 100644 index 00000000..f3700bfb --- /dev/null +++ b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentService.java @@ -0,0 +1,20 @@ +package com.bonus.sgzb.file.service; + +import org.springframework.web.multipart.MultipartFile; + +/** + * Description: 腾讯云上传服务 + * + * @Author 阮世耀 + * @Create 2023/12/3 16:28 + * @Version 1.0 + */ +public interface FileUploadTencentService { + + /** + * 上传文件 + * @param file 上传的文件 + * @return 上传成功返回文件地址,失败返回null + */ + String uploadFile(MultipartFile file); +} diff --git a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentServiceImpl.java b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentServiceImpl.java new file mode 100644 index 00000000..0ac2757f --- /dev/null +++ b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/FileUploadTencentServiceImpl.java @@ -0,0 +1,77 @@ +package com.bonus.sgzb.file.service; + +import com.bonus.sgzb.common.core.utils.uuid.IdUtils; +import com.bonus.sgzb.common.core.utils.uuid.UUID; +import com.bonus.sgzb.file.config.ConstantPropertiesUtil; +import com.qcloud.cos.COSClient; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.http.HttpProtocol; +import com.qcloud.cos.model.ObjectMetadata; +import com.qcloud.cos.model.PutObjectRequest; +import com.qcloud.cos.model.PutObjectResult; +import com.qcloud.cos.region.Region; +import org.joda.time.DateTime; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; + +/** + * Description: 上传接口实现 + * + * @Author 阮世耀 + * @Create 2023/12/3 16:29 + * @Version 1.0 + */ +@Service +public class FileUploadTencentServiceImpl implements FileUploadTencentService { + + /** + * 上传文件到腾讯云对象存储(COS) + * @param file 要上传的文件 + * @return 上传成功返回文件的URL,失败返回null + */ + @Override + public String uploadFile(MultipartFile file) { + // 1 初始化用户身份信息(secretId, secretKey)。 + String secretId = ConstantPropertiesUtil.ACCESS_KEY_ID; + String secretKey = ConstantPropertiesUtil.ACCESS_KEY_SECRET; + COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); + // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224 + Region region = new Region(ConstantPropertiesUtil.END_POINT); + ClientConfig clientConfig = new ClientConfig(); + // 这里建议设置使用 https 协议 + clientConfig.setHttpProtocol(HttpProtocol.https); + clientConfig.setRegion(region); + // 3 生成 cos 客户端。 + COSClient cosClient = new COSClient(cred, clientConfig); + + // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式 + String bucketName = ConstantPropertiesUtil.BUCKET_NAME; + // 对象键(Key)是对象在存储桶中的唯一标识。 998u-09iu-09i-333 + //在文件名称前面添加uuid值 + String key = IdUtils.fastSimpleUuid() + file.getOriginalFilename(); + //对上传文件分组,根据当前日期 /2024/04/02 + String dateTime = new DateTime().toString("yyyy/MM/dd"); + key = dateTime+"/"+key; + try { + //获取上传文件输入流 + InputStream inputStream = file.getInputStream(); + ObjectMetadata objectMetadata = new ObjectMetadata(); + PutObjectRequest putObjectRequest = new PutObjectRequest( + bucketName, + key, + inputStream, + objectMetadata); + // 高级接口会返回一个异步结果Upload + PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); + // 返回上传文件路径:https://ggkt-atguigu-1310644373.cos.ap-beijing.myqcloud.com/01.jpg + return "https://" + bucketName + "." + "cos" + "." + ConstantPropertiesUtil.END_POINT+".myqcloud.com" + "/" + key; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/MinioSysFileServiceImpl.java b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/MinioSysFileServiceImpl.java index b7ff53cb..ce0f6075 100644 --- a/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/MinioSysFileServiceImpl.java +++ b/sgzb-modules/sgzb-file/src/main/java/com/bonus/sgzb/file/service/MinioSysFileServiceImpl.java @@ -1,49 +1,49 @@ -package com.bonus.sgzb.file.service; - -import java.io.InputStream; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; -import com.alibaba.nacos.common.utils.IoUtils; -import com.bonus.sgzb.file.config.MinioConfig; -import com.bonus.sgzb.file.utils.FileUploadUtils; -import io.minio.MinioClient; -import io.minio.PutObjectArgs; - -/** - * Minio 文件存储 - * - * @author ruoyi - */ -@Service -public class MinioSysFileServiceImpl implements ISysFileService -{ - @Autowired - private MinioConfig minioConfig; - - @Autowired - private MinioClient client; - - /** - * Minio文件上传接口 - * - * @param file 上传的文件 - * @return 访问地址 - * @throws Exception - */ - @Override - public String uploadFile(MultipartFile file) throws Exception - { - String fileName = FileUploadUtils.extractFilename(file); - InputStream inputStream = file.getInputStream(); - PutObjectArgs args = PutObjectArgs.builder() - .bucket(minioConfig.getBucketName()) - .object(fileName) - .stream(inputStream, file.getSize(), -1) - .contentType(file.getContentType()) - .build(); - client.putObject(args); - IoUtils.closeQuietly(inputStream); - return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName; - } -} +//package com.bonus.sgzb.file.service; +// +//import java.io.InputStream; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +//import org.springframework.web.multipart.MultipartFile; +//import com.alibaba.nacos.common.utils.IoUtils; +//import com.bonus.sgzb.file.config.MinioConfig; +//import com.bonus.sgzb.file.utils.FileUploadUtils; +//import io.minio.MinioClient; +//import io.minio.PutObjectArgs; +// +///** +// * Minio 文件存储 +// * +// * @author ruoyi +// */ +//@Service +//public class MinioSysFileServiceImpl implements ISysFileService +//{ +// @Autowired +// private MinioConfig minioConfig; +// +// @Autowired +// private MinioClient client; +// +// /** +// * Minio文件上传接口 +// * +// * @param file 上传的文件 +// * @return 访问地址 +// * @throws Exception +// */ +// @Override +// public String uploadFile(MultipartFile file) throws Exception +// { +// String fileName = FileUploadUtils.extractFilename(file); +// InputStream inputStream = file.getInputStream(); +// PutObjectArgs args = PutObjectArgs.builder() +// .bucket(minioConfig.getBucketName()) +// .object(fileName) +// .stream(inputStream, file.getSize(), -1) +// .contentType(file.getContentType()) +// .build(); +// client.putObject(args); +// IoUtils.closeQuietly(inputStream); +// return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName; +// } +//} diff --git a/sgzb-modules/sgzb-file/src/main/resources/bootstrap.yml b/sgzb-modules/sgzb-file/src/main/resources/bootstrap.yml index 7c076c1b..f98b1aee 100644 --- a/sgzb-modules/sgzb-file/src/main/resources/bootstrap.yml +++ b/sgzb-modules/sgzb-file/src/main/resources/bootstrap.yml @@ -2,6 +2,28 @@ server: port: 9300 +# 腾讯云cos +tencent: + cos: + file: + # 存储桶所在地域 + region: ap-guangzhou + # 存储桶所在地域 + bucketregion: ap-guangzhou + # 存储桶名称 + bucketname: prod-rental-1301524038 + # API账号 + secretid: AKIDrreCVaRKDtMcgfU5QW9iEfv67tMfldJn + # API密钥 + secretkey: OXUgeMo0yhBRTGo6sVu3yiFX4rQtAzc3 +file: + path: 1 + prefix: 2 + domain: 3 + +fdfs: + domain: 3 + # Spring spring: application: