From 9287270fdb92c92d7e362a34aa783d37bf03ce71 Mon Sep 17 00:00:00 2001 From: "kuang.yife" Date: Sun, 10 Dec 2023 14:45:48 +0800 Subject: [PATCH] =?UTF-8?q?oss=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/RuoYiApplication.java | 13 ++ .../controller/tool/OssFileController.java | 34 ++++ .../web/controller/tool/TestController.java | 183 ------------------ .../com/ruoyi/web/core/config/OssConfig.java | 22 +++ .../com/ruoyi/web/service/OssService.java | 9 + .../web/service/impl/OssServiceImpl.java | 51 +++++ .../src/main/resources/application.yml | 8 + .../ruoyi/framework/config/ShiroConfig.java | 4 +- 8 files changed, 140 insertions(+), 184 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/OssFileController.java delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/OssConfig.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/service/OssService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/service/impl/OssServiceImpl.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index a0e726bd..517f6641 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -1,8 +1,12 @@ package com.ruoyi; +import com.aliyun.oss.OSSClient; +import com.ruoyi.web.core.config.OssConfig; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.Bean; /** * 启动程序 @@ -12,6 +16,9 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class RuoYiApplication { + @Autowired + private OssConfig ossConfig; + public static void main(String[] args) { // System.setProperty("spring.devtools.restart.enabled", "false"); @@ -27,4 +34,10 @@ public class RuoYiApplication " | | \\ / \\ / \n" + " ''-' `'-' `-..-' "); } + + @Bean + public OSSClient OssClient() { + return new OSSClient(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + } + } \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/OssFileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/OssFileController.java new file mode 100644 index 00000000..7a488b5c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/OssFileController.java @@ -0,0 +1,34 @@ +package com.ruoyi.web.controller.tool; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.web.service.OssService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +/** + *

文件上传

+ * @author clunt + */ +@RestController +@Api(tags = "App*文件上传") +@RequestMapping(value = "/tool/oss") +public class OssFileController { + + @Autowired + private OssService ossService; + + @ResponseBody + @PostMapping(value = "/upload") + @ApiOperation(value = "文件上传接口,返回文件的url地址") + public Result upload(@RequestPart @RequestParam("file") MultipartFile multipartFile) { + try { + return Result.success(ossService.upload(multipartFile)); + }catch (Exception e){ + return Result.error(e.getMessage()); + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java deleted file mode 100644 index c55f9749..00000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.ruoyi.web.controller.tool; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; - -/** - * swagger 用户测试方法 - * - * @author ruoyi - */ -@Api("用户信息管理") -@RestController -@RequestMapping("/test/user") -public class TestController extends BaseController -{ - private final static Map users = new LinkedHashMap(); - { - users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); - users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); - } - - @ApiOperation("获取用户列表") - @GetMapping("/list") - public R> userList() - { - List userList = new ArrayList(users.values()); - return R.ok(userList); - } - - @ApiOperation("获取用户详细") - @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) - @GetMapping("/{userId}") - public R getUser(@PathVariable Integer userId) - { - if (!users.isEmpty() && users.containsKey(userId)) - { - return R.ok(users.get(userId)); - } - else - { - return R.fail("用户不存在"); - } - } - - @ApiOperation("新增用户") - @ApiImplicitParams({ - @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class), - @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class), - @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class), - @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class) - }) - @PostMapping("/save") - public R save(UserEntity user) - { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) - { - return R.fail("用户ID不能为空"); - } - users.put(user.getUserId(), user); - return R.ok(); - } - - @ApiOperation("更新用户") - @PutMapping("/update") - public R update(@RequestBody UserEntity user) - { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) - { - return R.fail("用户ID不能为空"); - } - if (users.isEmpty() || !users.containsKey(user.getUserId())) - { - return R.fail("用户不存在"); - } - users.remove(user.getUserId()); - users.put(user.getUserId(), user); - return R.ok(); - } - - @ApiOperation("删除用户信息") - @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) - @DeleteMapping("/{userId}") - public R delete(@PathVariable Integer userId) - { - if (!users.isEmpty() && users.containsKey(userId)) - { - users.remove(userId); - return R.ok(); - } - else - { - return R.fail("用户不存在"); - } - } -} - -@ApiModel(value = "UserEntity", description = "用户实体") -class UserEntity -{ - @ApiModelProperty("用户ID") - private Integer userId; - - @ApiModelProperty("用户名称") - private String username; - - @ApiModelProperty("用户密码") - private String password; - - @ApiModelProperty("用户手机") - private String mobile; - - public UserEntity() - { - - } - - public UserEntity(Integer userId, String username, String password, String mobile) - { - this.userId = userId; - this.username = username; - this.password = password; - this.mobile = mobile; - } - - public Integer getUserId() - { - return userId; - } - - public void setUserId(Integer userId) - { - this.userId = userId; - } - - public String getUsername() - { - return username; - } - - public void setUsername(String username) - { - this.username = username; - } - - public String getPassword() - { - return password; - } - - public void setPassword(String password) - { - this.password = password; - } - - public String getMobile() - { - return mobile; - } - - public void setMobile(String mobile) - { - this.mobile = mobile; - } -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/OssConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/OssConfig.java new file mode 100644 index 00000000..fceffa95 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/OssConfig.java @@ -0,0 +1,22 @@ +package com.ruoyi.web.core.config; + +import com.aliyun.oss.OSSClient; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "aliyun") +@Data +public class OssConfig { + + private String endpoint; + private String accessKeyId; + private String accessKeySecret; + private String bucketName; + private String urlPrefix; + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/service/OssService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/service/OssService.java new file mode 100644 index 00000000..4ec14bf3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/service/OssService.java @@ -0,0 +1,9 @@ +package com.ruoyi.web.service; + +import org.springframework.web.multipart.MultipartFile; + +public interface OssService { + + String upload(MultipartFile multipartFile) throws Exception; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/service/impl/OssServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/web/service/impl/OssServiceImpl.java new file mode 100644 index 00000000..eca6864b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/service/impl/OssServiceImpl.java @@ -0,0 +1,51 @@ +package com.ruoyi.web.service.impl; + +import cn.hutool.core.date.DateTime; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.PutObjectResult; +import com.ruoyi.common.utils.ExceptionUtil; +import com.ruoyi.web.core.config.OssConfig; +import com.ruoyi.web.service.OssService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayInputStream; + +@Slf4j +@Service +public class OssServiceImpl implements OssService { + + @Autowired + private OSSClient ossClient; + + @Autowired + private OssConfig ossConfig; + + @Override + public String upload(MultipartFile multipartFile) throws Exception{ + String filePath = getFilePath(multipartFile.getOriginalFilename()); + // 上传到阿里云 + try { + PutObjectResult ossResult = ossClient.putObject(ossConfig.getBucketName(), filePath, new + ByteArrayInputStream(multipartFile.getBytes())); + log.info("上传文件到OSS结果:{}", ossResult.getResponse()); + } catch (Exception e) { + log.error(ExceptionUtil.getExceptionMessage(e)); + throw new Exception(e.getMessage()); + } + return ossConfig.getUrlPrefix() + filePath; + } + + private String getFilePath(String sourceFileName) { + DateTime dateTime = new DateTime(); + return "images/" + dateTime.toString("yyyy") + + "/" + dateTime.toString("MM") + "/" + + dateTime.toString("dd") + "/" + System.currentTimeMillis() + + RandomUtils.nextInt(100, 9999) + "." + + StringUtils.substringAfterLast(sourceFileName, "."); + } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index b636ac11..a5a31b1f 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -166,3 +166,11 @@ youban: template-code: SMS_463638490 access-key: LTAI5tSVfRSePk9cfLUT5y5f secret: qlpXG6usf0zPgQQECDAlrfYoMRHxgM + +aliyun: + access-key-id: LTAI5tSVfRSePk9cfLUT5y5f + access-key-secret: qlpXG6usf0zPgQQECDAlrfYoMRHxgM + bucket-name: youban2023 + endpoint: http://oss-cn-shenzhen.aliyuncs.com + url-prefix: http://youban2023.oss-cn-shenzhen.aliyuncs.com/ + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java index bc9ad063..9db7393b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java @@ -294,8 +294,10 @@ public class ShiroConfig filterChainDefinitionMap.put("/login", "anon,captchaValidate"); // 注册相关 filterChainDefinitionMap.put("/register", "anon,captchaValidate"); - // 短信文档 + // 短信接口 filterChainDefinitionMap.put("/tool/sms/**", "anon"); + // oss文件接口 + filterChainDefinitionMap.put("/tool/oss/**", "anon"); // app登陆接口 filterChainDefinitionMap.put("/app/login/**", "anon"); // 系统权限列表