什么是对象存储OSS?
阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。
OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)、归档存储(Archive)、冷归档存储(Cold Archive)作为不经常访问数据的存储方式。
作者习惯性先写controller层再到service层再到impl层
注意点:R.ok()是自定义result返回结果swagger测试文档,方便测试使用;您也可以使用其他工具测试,如何搭建swagger可访问Swagger整合;
1:引入pom对应的jar包
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!--日期工具(使用这个包的dateTime)-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
2:自定义工具类,主要用来获取配置文件的属性;
方便分类建议建一个Utils包,在包里面建工具类
package com.withYou.oss.Utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component //交给spring管理
//需要实现InitializingBean接口
//@Value("${}"):用来获取配置文件属性
public class ConstantPropertiesUtils implements InitializingBean {
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
// 为了其他模块可以使用,定义公开静态常量
public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
//进行赋值绑定
END_POINT=endpoint;
KEY_ID=keyId;
KEY_SECRET=keySecret;
BUCKET_NAME=bucketName;
}
}
//这些数据需要登录阿里云网站创建oss储存,找到AccessKey和创建的oss属性来对应绑定
//application.properties
aliyun.oss.file.endpoint=your ndpoint
aliyun.oss.file.keyid=your keyid
aliyun.oss.file.keysecret=your keysecret
aliyun.oss.file.bucketname=your bucketname
@RestController
@RequestMapping("Oss/")
public class OssController {
//注入service接口
@Autowired
private OssService ossService;
@PostMapping("uploadOssFile")
public R uploadOssFile(MultipartFile file){//MultipartFile 上传文件传入
String url = ossService.uploadOssFile(file);
return R.ok().data("url",url);
}
}
service 接口层
public interface OssService {
String uploadOssFile(MultipartFile file);
}
package com.withYou.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.oss.Utils.ConstantPropertiesUtils;
import com.atguigu.oss.service.OssService;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadOssFile(MultipartFile file) {
// 用工具类获取方便些(绑定的properties文件里面)
String endpoint = ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 获取上传文件输入流
InputStream inputStream= file.getInputStream();
// 获取文件名称
String originalFilename = file.getOriginalFilename();
/**
*当上传文件名相同,则覆盖
* 用uuid生成随机唯一的值
*上传默认会有“-“,所有使用字符串替换掉
*/
String uuid = UUID.randomUUID().toString().replaceAll("-","");
originalFilename=uuid+originalFilename;
// 把文件按照日期进行分类(pom引入了日期jar包) 示例:2028/08/23
String datePath= new DateTime().toString("yyyy/MM/dd");
// 拼接
originalFilename=datePath+"/"+originalFilename;
ossClient.putObject(bucketName,originalFilename,inputStream);
ossClient.shutdown();
String url ="https://"+bucketName+"."+endpoint+"/"+originalFilename;
return url;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
最后一步:启动类
//@EnableSwagger2该注解为swagger的,如果在其他模块写了,可以使用@ComponentScan("")扫描
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//该功能不存数据库,取消数据源自动配置
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class,args);
}
}