diff --git a/gan-common/ruoyi-common-core/pom.xml b/gan-common/ruoyi-common-core/pom.xml index 3db0804..63ea30c 100644 --- a/gan-common/ruoyi-common-core/pom.xml +++ b/gan-common/ruoyi-common-core/pom.xml @@ -113,6 +113,19 @@ swagger-annotations + + + javax.mail + javax.mail-api + 1.6.2 + + + + + com.sun.mail + javax.mail + 1.6.2 + diff --git a/gan-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/mail/AliMailUtil.java b/gan-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/mail/AliMailUtil.java index 928ce71..eefebab 100644 --- a/gan-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/mail/AliMailUtil.java +++ b/gan-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/mail/AliMailUtil.java @@ -25,7 +25,7 @@ public class AliMailUtil { private static final String SEND_ADDRESS = "mail@gbgobig.com"; private static final String SEND_PASSWORD = "ganbeigobig@2024"; - private static final String HOST = "smtp.qiye.aliyun.com"; + private static final String HOST = "smtp.mxhichina.com"; private static final String PORT = "25"; // 或80 private static final String SUBJECT = "Email verification code"; private static final String FILE_PATH = null; diff --git a/gan-modules/ruoyi-file/pom.xml b/gan-modules/ruoyi-file/pom.xml index 98b0f8f..5171aba 100644 --- a/gan-modules/ruoyi-file/pom.xml +++ b/gan-modules/ruoyi-file/pom.xml @@ -65,6 +65,21 @@ com.ruoyi ruoyi-common-swagger + + com.aliyun.oss + aliyun-sdk-oss + 3.10.2 + + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + cn.hutool + hutool-all + 4.1.1 + diff --git a/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java b/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java index 4fb8181..392b206 100644 --- a/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java +++ b/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java @@ -1,5 +1,6 @@ package com.ruoyi.file.controller; +import com.ruoyi.file.service.OssService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +25,9 @@ public class SysFileController @Autowired private ISysFileService sysFileService; + @Autowired + private OssService ossService; + /** * 文件上传请求 */ @@ -33,7 +37,9 @@ public class SysFileController try { // 上传并返回访问地址 - String url = sysFileService.uploadFile(file); +// String url = sysFileService.uploadFile(file); + R r = ossService.uploadFile(file); + String url = r.getData().toString(); SysFile sysFile = new SysFile(); sysFile.setName(FileUtils.getName(url)); sysFile.setUrl(url); diff --git a/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java b/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java new file mode 100644 index 0000000..33993f3 --- /dev/null +++ b/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java @@ -0,0 +1,13 @@ +package com.ruoyi.file.service; + + +import com.ruoyi.common.core.domain.R; +import org.springframework.web.multipart.MultipartFile; + +public interface OssService { + + R uploadFile(MultipartFile file); + R uploadFileList(MultipartFile[] files); + + R deleteFile(String path); +} \ No newline at end of file diff --git a/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java b/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java new file mode 100644 index 0000000..8a57385 --- /dev/null +++ b/gan-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java @@ -0,0 +1,86 @@ +package com.ruoyi.file.service; + + +import cn.hutool.core.date.DateTime; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.ruoyi.common.core.domain.R; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@Service("ossService") +public class OssServiceImpl implements OssService { + + + + private static final String schema= "https://"; + private static final String endpoint= "oss-cn-shanghai.aliyuncs.com"; + private static final String accessKeyId= "LTAI5tM1LeE2pkiS3qEFQkfb"; + private static final String accessKeySecret= "fEZZyFvWkETS8Clm73f7qmY9ohcTpc"; + private static final String bucketName= "gan-app-test"; + @Override + public R uploadFile(MultipartFile file) { + try { + //4、 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(schema + endpoint, accessKeyId, accessKeySecret); + String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//获取上传文件的名称 + InputStream inputStream = file.getInputStream(); + // 通过ossClient上传文件: 参数1:桶名, 参数2:上传后的文件路径+文件名 ,参数3:要上传的文件流 + String objectName = new DateTime().toString("yyyy/MM/dd/") + + UUID.randomUUID().toString().replace("-", "").substring(0, 16) + fileName;//使用UUID+源文件名称后缀拼接生成objectName + ossClient.putObject(bucketName, objectName, inputStream); + // 关闭OSSClient。 + ossClient.shutdown(); + + String path = schema + bucketName + "." + endpoint + "/" + objectName;//手动拼接上传成功的图片地址 +// System.out.println("path ======================================" + path); + return R.ok(path); + + } catch (IOException e) { + throw new RuntimeException("图片上传失败"); + } + + } + + @Override + public R uploadFileList(MultipartFile[] files) { + List list = new ArrayList<>(); + try { + //4、 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(schema + endpoint, accessKeyId, accessKeySecret); + for (MultipartFile file : files) { + String fileName = file.getOriginalFilename();//获取上传文件的名称 + InputStream inputStream = file.getInputStream(); + // 通过ossClient上传文件: 参数1:桶名, 参数2:上传后的文件路径+文件名 ,参数3:要上传的文件流 + String objectName = new DateTime().toString("yyyy/MM/dd/") + + UUID.randomUUID().toString().replace("-", "").substring(0, 8) + + "_" + fileName;//使用UUID+源文件名称后缀拼接生成objectName + ossClient.putObject(bucketName, objectName, inputStream); + // 关闭OSSClient。 + ossClient.shutdown(); + + String path = schema + bucketName + "." + endpoint + "/" + objectName;//手动拼接上传成功的图片地址 + list.add(path); + } + } catch (IOException e) { + throw new RuntimeException("图片上传失败"); + } + return R.ok(list); + } + + @Override + public R deleteFile(String path) { + String host = schema + bucketName + "." + endpoint +"/"; + String objectName = path.replace(host,""); + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + ossClient.deleteObject(bucketName, objectName.trim()); + ossClient.shutdown(); + return R.ok("删除成功"); + } +} \ No newline at end of file diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppInform.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppInform.java index 955f199..9e40a9b 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppInform.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppInform.java @@ -1,5 +1,6 @@ package com.ruoyi.app.domain; +import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.core.annotation.Excel; @@ -11,6 +12,7 @@ import com.ruoyi.common.core.web.domain.BaseEntity; * @author wyh * @date 2024-05-15 */ +@Data public class AppInform extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/gan-ui/src/views/app/dynamic/detail.vue b/gan-ui/src/views/app/dynamic/detail.vue index 17e9852..ec3f7dc 100644 --- a/gan-ui/src/views/app/dynamic/detail.vue +++ b/gan-ui/src/views/app/dynamic/detail.vue @@ -1,23 +1,87 @@ + + diff --git a/gan-ui/src/views/app/dynamic/index.vue b/gan-ui/src/views/app/dynamic/index.vue index 1f1bfd9..4f2081b 100644 --- a/gan-ui/src/views/app/dynamic/index.vue +++ b/gan-ui/src/views/app/dynamic/index.vue @@ -1,6 +1,13 @@ - + - + - + @@ -162,7 +199,13 @@ diff --git a/gan-ui/src/views/app/inform/index.vue b/gan-ui/src/views/app/inform/index.vue index 5550a22..197ba85 100644 --- a/gan-ui/src/views/app/inform/index.vue +++ b/gan-ui/src/views/app/inform/index.vue @@ -1,9 +1,33 @@