苍穹外卖--新增菜品-文件上传功能实现

This commit is contained in:
2025-11-10 16:46:21 +08:00
parent 3257ae9b43
commit 4c6c570d49
9 changed files with 168 additions and 5 deletions

View File

@@ -25,7 +25,7 @@
<commons.lang>2.6</commons.lang> <commons.lang>2.6</commons.lang>
<druid>1.2.1</druid> <druid>1.2.1</druid>
<pagehelper>1.3.0</pagehelper> <pagehelper>1.3.0</pagehelper>
<aliyun.sdk.oss>3.10.2</aliyun.sdk.oss> <aliyun.sdk.oss>3.17.4</aliyun.sdk.oss>
<knife4j>3.0.2</knife4j> <knife4j>3.0.2</knife4j>
<aspectj>1.9.4</aspectj> <aspectj>1.9.4</aspectj>
<jjwt>0.9.1</jjwt> <jjwt>0.9.1</jjwt>

View File

@@ -5,7 +5,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@ConfigurationProperties(prefix = "sky.alioss") @ConfigurationProperties(prefix = "sky.alioss1")
@Data @Data
public class AliOssProperties { public class AliOssProperties {

View File

@@ -0,0 +1,23 @@
package com.sky.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* ClassName: AliOSSProperties
* Package: com.inmind.utils
* Description:
*
* @Author xuxin
* @Create 5/14 15:10
* @Version 1.0
*/
@Data
@Component
@ConfigurationProperties(prefix = "sky.alioss")
public class InmindAliOSSProperties {
private String endpoint;
private String bucketName;
private String region;
}

View File

@@ -0,0 +1,70 @@
package com.sky.utils;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyuncs.exceptions.ClientException;
import com.sky.properties.InmindAliOSSProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
/**
* 阿里云 OSS 工具类
*/
@Data
@AllArgsConstructor
//@Component
public class InmindAliOSSUtils {
/*@Value("${aliyun.oss.endpoint}")
private String endpoint;
@Value("${aliyun.oss.bucketName}")
private String bucketName;
@Value("${aliyun.oss.region}")
private String region ;*/
InmindAliOSSProperties aliOSSProperties;
/**
* 实现上传图片到OSS
*/
public String upload(MultipartFile file) throws IOException, ClientException {
// 从环境变量中获取访问凭证。运行本代码示例之前请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 获取上传的文件的输入流
InputStream inputStream = file.getInputStream();
// 避免文件覆盖
String originalFilename = file.getOriginalFilename();
String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
//上传文件到 OSS
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(aliOSSProperties.getEndpoint())
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(aliOSSProperties.getRegion())
.build();
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(aliOSSProperties.getBucketName(), fileName, inputStream);
PutObjectResult result = ossClient.putObject(putObjectRequest);
//文件访问路径
String url = aliOSSProperties.getEndpoint().split("//")[0] + "//" + aliOSSProperties.getBucketName() + "." + aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;
// 关闭ossClient
ossClient.shutdown();
return url;// 把上传到oss的路径返回
}
}

View File

@@ -58,13 +58,13 @@ public class AutoFillAspect {
Method setUpdateUser = arg.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); Method setUpdateUser = arg.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);
setUpdateUser.invoke(arg,currentId); setUpdateUser.invoke(arg,currentId);
} else { }
//update //update
Method setUpdateTime = arg.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); Method setUpdateTime = arg.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);
setUpdateTime.invoke(arg,now); setUpdateTime.invoke(arg,now);
Method setUpdateUser = arg.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); Method setUpdateUser = arg.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);
setUpdateUser.invoke(arg,currentId); setUpdateUser.invoke(arg,currentId);
}
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@@ -0,0 +1,21 @@
package com.sky.config;
import com.sky.properties.InmindAliOSSProperties;
import com.sky.utils.InmindAliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 为sky-server模块注册OSS工具类对象到sprong容器中
*/
@Configuration
@Slf4j
public class OssConfiguration {
@Bean
public InmindAliOSSUtils inmindAliOSSUtils(InmindAliOSSProperties aliOSSProperties){
log.info("开始创建阿里云文件上传工具类对象到sprong容器中...,{}",aliOSSProperties);
return new InmindAliOSSUtils(aliOSSProperties);
}
}

View File

@@ -0,0 +1,41 @@
package com.sky.controller.admin;
import com.aliyuncs.exceptions.ClientException;
import com.sky.result.Result;
import com.sky.utils.InmindAliOSSUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
@Slf4j
@Api(tags = "通用接口")
@RequestMapping("/admin/common")
public class CommonController {
@Autowired
private InmindAliOSSUtils inmindAliOSSUtils;
@PostMapping("/upload")
@ApiOperation("文件上传")
public Result<String> upload(MultipartFile file) {
log.info("文件上传:{}",file);
String uploadUrl = null;
try {
uploadUrl = inmindAliOSSUtils.upload(file);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClientException e) {
throw new RuntimeException(e);
}
return Result.success(uploadUrl);
}
}

View File

@@ -6,3 +6,7 @@ sky:
database: sky_take_out2 database: sky_take_out2
username: root username: root
password: 1234 password: 1234
alioss:
endpoint: https://oss-cn-shanghai.aliyuncs.com
bucket-name: inmind-test
region: cn-shanghai

View File

@@ -3,7 +3,7 @@ server:
spring: spring:
profiles: profiles:
active: dev active: dev #程序的运行环境:开发环境
main: main:
allow-circular-references: true allow-circular-references: true
datasource: datasource:
@@ -37,3 +37,7 @@ sky:
admin-ttl: 72000000 admin-ttl: 72000000
# 设置前端传递过来的令牌名称 # 设置前端传递过来的令牌名称
admin-token-name: token admin-token-name: token
alioss:
endpoint: ${sky.alioss.endpoint}
bucket-name: ${sky.alioss.bucket-name}
region: ${sky.alioss.region}