投资公司网站设计,保定做网站多钱,企业购物平台,知名设计品牌有哪些阿里云对象存储 1、创建阿里云对象存储节点2、上传文件2.1 修改项目配置文件2.2 定义一个Properties类获取配置信息2.3 准备一个alioss工具类2.4 创建注册类#xff0c;将AliOssUtil 注册成Bean2.5 使用AliOssUtil 工具类上传文件2.6 注意事项 使用阿里云对象存储服务分为以下… 阿里云对象存储 1、创建阿里云对象存储节点2、上传文件2.1 修改项目配置文件2.2 定义一个Properties类获取配置信息2.3 准备一个alioss工具类2.4 创建注册类将AliOssUtil 注册成Bean2.5 使用AliOssUtil 工具类上传文件2.6 注意事项 使用阿里云对象存储服务分为以下几步
1、创建阿里云对象存储节点
首先需要创建阿里云对象存储节点。获取endpoint、accessKeyId、accessKeySecret、bucketName四个信息。
进入阿里云官网并注册登录。鼠标悬放在产品上然后悬放到存储上然后点击对象存储OSS。 点击管理控制台。进入对象存储OSS管理控制台。 创建Bucket。如果是第一次使用对象存储OSS服务则首先需要开通服务。开通后点击左上角Bucket列表点击创建Bucket修改Bucket名称点击完成创建。注意复制Endpoint信息。 获取AccessKey ID和 AccessKey Secret。保存好AccessKey ID和 AccessKey Secret。 记录需要的四个信息。 endpoint在创建Bucket时选择地域下面会有对应的Endpoint。 bucketName创建Bucket时自定义。 AccessKey ID和 AccessKey Secret加密获取。
2、上传文件
2.1 修改项目配置文件
在项目配置文件中定义endpoint、accessKeyId、accessKeySecret、bucketName四个信息。这里使用的是yaml格式配置文件。
web:alioss:access-key-id: ---access-key-secret: ---bucket-name: ---endpoint: ---2.2 定义一个Properties类获取配置信息
可以新建一个properties包专门存放用于获取配置信息相关的类。 这里创建一个AliOssProperties类用于保存与阿里云对象存储OSS服务相关的四个信息。 需要在该类上增加几个注解
Component将该类注册成BeanConfigurationProperties给prefix 属性赋值对应的配置文件信息。这里是web.alioss。该注解的作用是从配置文件获取配置信息并将配置信息赋值非成员变量。需要注意配置文件中的名称与成员变量名一致或者配置文件名使用 - 隔开成员变量名使用驼峰命名法。DataLombok注解生成get/set等方法。
Component // 将该类注册成Bean
ConfigurationProperties(prefix web.alioss) // 从配置文件中获取配置信息赋值给成员变量
Data // 生成get/set等方法
public class AliOssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;}此处使用到了Lombok提供的注解需要引入Lombok相关依赖
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId
/dependency2.3 准备一个alioss工具类
阿里云官方提供许多简单实现代码供参考阿里云对象存储文档中心。这里使用已经封装好的工具类。使用前需要引入阿里云oss相关依赖。
dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion3.17.4/version
/dependency如果是Java9及以上版本还需要添加JAXB相关依赖
dependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version
/dependency
dependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion1.1.1/version
/dependency
!-- no more than 2.3.3--
dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactIdversion2.3.3/version
/dependency同样可以专门创建一个utils包存放工具类。可以看到工具类AliOssUtil中有四个成员变量分别于四个关键信息对应。
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/ObjectNameStringBuilder stringBuilder new StringBuilder(https://);stringBuilder.append(bucketName).append(.).append(endpoint).append(/).append(objectName);log.info(文件上传到:{}, stringBuilder.toString());return stringBuilder.toString();}
}2.4 创建注册类将AliOssUtil 注册成Bean
创建一个OssConfiguration 类使用Configuration 修饰使其成为注册类。同时将配置文件中的配置信息传递给工具类的成员变量。配置类也可以创建一个config包存放。
Configuration // 配置类
Slf4j
public class OssConfiguration {Bean // 第三方Bean交给Spring容器管理ConditionalOnMissingBean // 如果IOC容器中没有该Bean则创建public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {log.info(开始创建阿里云文件上传工具类对象...);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());}
}注意
类上需要加Configuration注解使其成为注册类在类中定义一个方法。方法返回值类型是AliOssUtil 工具类。该方法传入参数为上述定义好的AliOssProperties类对象。在方法体中使用带参构造方法创建一个AliOssUtil 对象并返回使用Bean注解修饰该方法第三方Bean交给Spring容器管理使用ConditionalOnMissingBean注解如果IOC容器中没有该Bean则创建
2.5 使用AliOssUtil 工具类上传文件
文件上传一般作为项目的controller层由于是一个通用业务所以一般会命名CommonController。
RestController
RequestMapping(/common)
Slf4j
public class CommonController {Autowiredprivate AliOssUtil aliOssUtil; // 1. 注入AliOssUtil Bean对象/*** 文件上传* param file* return*/PostMapping(/upload)public ResultString upload(MultipartFile file) { // 2. 使用MultipartFile 对象接收文件log.info(文件上传{}, file);try {// 3. 获取原始文件名String originalFilename file.getOriginalFilename(); // 4. 获取原始文件名后缀int index originalFilename.lastIndexOf(.);String extname originalFilename.substring(index);// 5. 构建UUID随机文件名String newFilename UUID.randomUUID().toString() extname;// 6. 调用upload()方法上传文件String filePath aliOssUtil.upload(file.getBytes(), newFilename);return Result.success(filePath);} catch (IOException e) {e.printStackTrace();log.error(文件上传失败{}, e);}return Result.error(文件上传失败...);}
}这里接口的返回值为Restlt是后端统一返回结果的格式。
/*** 后端统一返回结果* param T*/
Data
public class ResultT implements Serializable {private Integer code; //编码1成功0和其它数字为失败private String msg; //错误信息private T data; //数据public static T ResultT success() {ResultT result new ResultT();result.code 1;return result;}public static T ResultT success(T object) {ResultT result new ResultT();result.data object;result.code 1;return result;}public static T ResultT error(String msg) {Result result new Result();result.msg msg;result.code 0;return result;}
}2.6 注意事项
在controller接口中有两个地方值得注意
upload()接收的的参数类型是MultipartFileSpringBoot默认上传的文件大小有限。当上传大文件时需要在配置文件中修改相关配置。 max-file-size指单个文件最大不超过10MB max-request-size指一次请求的文件总量不超过100MB
spring:servlet:multipart:max-file-size: 10MBmax-request-size: 100MB在上传到阿里云前需要对文件名进行修改保证文件名唯一。可以使用UUID设置文件名。