1.新增菜品
工具类AliOssUtil .java
@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
/**
* 文件上传
*
* @param bytes
* @param objectName
* @return
*/
public String upload(byte[] bytes, String objectName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 创建PutObject请求。
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
//文件访问路径规则 https://BucketName.Endpoint/ObjectName
StringBuilder stringBuilder = new StringBuilder("https://");
stringBuilder
.append(bucketName)
.append(".")
.append(endpoint)
.append("/")
.append(objectName);
log.info("文件上传到:{}", stringBuilder.toString());
return stringBuilder.toString();
}
}
这段代码定义了一个名为AliOssUtil的Java类,用于实现向阿里云对象存储服务(OSS)上传文件的功能。该类包含以下主要部分:
- 类成员变量:定义了与阿里云OSS服务交互所需的一些基本信息,包括endpoint(OSS服务的访问域名),accessKeyId和accessKeySecret(用于身份验证的访问密钥ID和密钥),以及bucketName(存储桶名称,用于存储文件的容器)。
- 构造方法:通过@AllArgsConstructor注解,Lombok库自动生成一个包含所有成员变量作为参数的构造方法,用于创建AliOssUtil类的实例并初始化其成员变量。
- 日志记录:通过@Slf4j注解,Lombok库为该类自动生成日志记录对象log,便于在类中添加日志输出。
- 文件上传方法:upload方法是该类的核心功能,用于将字节数组(byte[] bytes)作为文件内容上传到OSS。该方法接受文件内容的字节数组和目标文件名(objectName)作为参数,并执行以下步骤:
- 使用成员变量中的认证信息和endpoint创建一个OSS客户端实例。
- 通过OSS客户端调用putObject方法,将字节流(封装在ByteArrayInputStream中)上传到指定的bucketName和objectName下。
- 在上传过程中,捕获并处理可能发生的两种异常:OSSException(表示请求已到达OSS但被拒绝)和ClientException(表示客户端在与OSS通信时遇到内部问题)。
- 最后,无论上传成功与否,都会关闭OSS客户端实例以释放资源。
- 方法返回上传文件的访问URL,格式为https://BucketName.Endpoint/ObjectName。
5.异常处理:在上传过程中,如果遇到异常情况,代码会捕获异常并打印错误信息,包括错误消息、错误代码、请求ID和主机ID等,有助于开发者诊断和解决问题。
总之,这段代码提供了一个简单的工具类,用于将文件上传到阿里云OSS服务,并返回文件的访问URL。
这段代码定义了一个名为OssConfiguration的Java配置类,用于Spring框架中。它的主要作用是配置和初始化AliOssUtil这个Bean(即Spring管理的对象),以便在Spring应用程序中自动注入和使用AliOssUtil进行阿里云OSS服务的相关操作。具体来说,该配置类通过以下几个关键点实现了这一功能:
- @Configuration:这是一个Spring注解,用于标识该类是一个配置类。Spring容器会在启动时扫描所有带有@Configuration注解的类,并根据其中定义的Bean创建和管理这些Bean。
- @Slf4j:这是Lombok提供的注解,用于自动生成日志记录器(log变量)。在这个配置类中,log被用来记录信息,帮助开发者了解AliOssUtil对象的创建过程。
- aliOssUtil方法:这个方法使用了两个Spring注解@Bean和@ConditionalOnMissingBean,并定义了如何创建和配置AliOssUtil这个Bean。
- @Bean:表明该方法返回的对象应该被注册为Spring应用程序上下文中的一个Bean。方法的名称(在这里是aliOssUtil)通常作为Bean的ID。
- @ConditionalOnMissingBean:这个注解指示Spring容器只有在不存在AliOssUtil类型的Bean时,才执行该方法创建AliOssUtil的Bean。这样可以避免重复创建相同类型的Bean,提高配置的灵活性。
- 方法参数:aliOssUtil方法接受一个AliOssProperties类型的参数。Spring容器会自动注入这个参数,该参数封装了与阿里云OSS服务交互所需的配置信息,如endpoint、accessKeyId、accessKeySecret和bucketName。
- 创建AliOssUtil实例:方法内部首先记录日志信息,显示开始创建阿里云对象,并展示相关配置。然后,使用从AliOssProperties对象获取的配置信息来创建AliOssUtil的实例,并返回这个实例。
总结来说,OssConfiguration配置类的作用是在Spring应用程序中自动配置和初始化AliOssUtil这个Bean,使得开发者可以轻松地在其他地方通过依赖注入的方式使用AliOssUtil,进行文件上传等阿里云OSS服务的操作。
出现报错
解决方法
上传成功
import java.io.IOException;
import java.util.UUID;
/**
* 通用接口
*/
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {
@Autowired
private AliOssUtil aliOssUtil;
/**
* 文件上传
* @param multipartFile
* @return
*/
@PostMapping("/upload")
@ApiOperation("文件上传")
public Result<String> upload(@RequestParam("file") MultipartFile multipartFile){
log.info("文件上传:{}",multipartFile);
try {
//获取原石文件名
String originalFilename = multipartFile.getOriginalFilename();
//截取原始文件名
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
//获得新的文件名称
String objectName = UUID.randomUUID().toString() + extension;
//文件的请求路径
String filePath = aliOssUtil.upload(multipartFile.getBytes(), objectName);
return Result.success(filePath);
} catch (IOException e) {
log.error("文件上传失败:{}",e);
}
return Result.error(MessageConstant.UPLOAD_FAILED);
}
}
新增菜品代码
2.菜品的分页查询