什么是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)或者深度冷归档(Deep Cold Archive)作为不经常访问数据的存储方式。
应用场景有哪些?
利用海量互联网带宽,OSS可以实现海量数据的互联网并发下载。OSS提供原生的传输加速功能,支持上传加速、下载加速,提升跨国、跨洋数据上传、下载的体验。同时,OSS也可以结合CDN产品,提供静态内容存储、分发到边缘节点的解决方案,利用CDN边缘节点缓存的数据,提升同一个文件被同一地区客户大量重复并发下载的体验。
我们如何快速使用OSS?
-
进入阿里云平台搜索oss根据提示开通oss功能
-
创建存储空间Bucker
第三步填写信息
参数说明:
Bucker名称创建后无法修改
地域:可以根据产品主要面向地点进行最优选择,
存储类型:
标准存储:提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问。适用于各种社交、分享类的图片、音视频应用、大型网站、大数据分析等业务场景。
低频访问:提供高持久性、较低存储成本的对象存储服务,适用于较低访问频率(平均每月访问频率1到2次)的业务场景
归档存储:提供高持久性、极低存储成本的对象存储服务。归档存储数据支持解冻(约1分钟)后访问或直接访问。归档存储适用于数据长期保存的业务场景,例如档案数据、医疗影像、科学资料、影视素材等
冷归档存储:提供高持久性、比归档存储的存储成本更低的对象存储服务。适用于需要超长时间存放的冷数据,例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等业务场景。
深度冷归档存储:提供高持久性、比冷归档存储成本更低的对象存储服务。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定。适用于需要超长时间存放的极冷数据,例如大数据及人工智能领域的原始数据的长期积累留存、媒体数据的长期保留、法规和合规性存档、磁带替换等业务场景。
存储冗余类型:
同城冗余:将您的数据冗余存储在同一个区域的多个可用区,可支持单个可用区(机房)整体故障时(如断电、火灾等),仍维持数据不丢失,可正常访问。
本地冗余:将您的数据冗余存储在同一个可用区的不同存储设备上,可支持两个存储设备并发损坏时,仍维持数据不丢失,可正常访问。
读写权限
私有:只有授权用户可以操作
公共读:只能读操作
公共读写:可读可写
所属资源组:就是买的oss产品
创建好之后oss也可以当作简单的存储工具存储一些数据
下面是我写的一个上传和列表展示功能的全部细节
第一步导入一个依赖
我这里是1.8版本的
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
第二步根据官方文档写了一个工具包
@Service
public class Aliossupload {
//阿里云的地域地址
private static final String ENDPOINT = "oss的地域地址";
//阿里云API的密钥Access Key ID
private static final String ACCESS_KEY_ID="密钥id";
//阿里云API的密钥Access Key Secret
private static final String ACCESS_KEY_SECRET="密钥";
// 填写Bucket名称,例如examplebucket。
private static final String BUCKET_NAME = "bucke名称";
private static final OSS ossClient;
static {
// 创建OSSClient实例。
ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID,ACCESS_KEY_SECRET);
}
public static String uploadFile(String fileName, byte[] fileBytes){
// // 创建OSSClient实例。
// OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID,ACCESS_KEY_SECRET);
ossClient.putObject(BUCKET_NAME, fileName, new ByteArrayInputStream(fileBytes));
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
// 生成URL
ossClient.generatePresignedUrl(BUCKET_NAME, fileName, expiration);
return "";
}
public static List<FileInfo> getupdate(){
ObjectListing objectListing = ossClient.listObjects(BUCKET_NAME);
// objectListing.getObjectSummaries获取所有文件的描述信息。
List<FileInfo> fileInfos = objectListing.getObjectSummaries().stream().map(s -> {
FileInfo fileInfo = new FileInfo();
fileInfo.setName(s.getKey());
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
URL url = ossClient.generatePresignedUrl(BUCKET_NAME, s.getKey(), expiration);
fileInfo.setUrl(url.toString());
return fileInfo;
}).collect(Collectors.toList());
return fileInfos;
}
}
这里有四个参数非常重要:
阿里云AccessKey Id:钥匙id
阿里云AccessKey Secret 钥匙密钥
密钥id和密钥在AccessKey管理里面进行设置
阿里云OSS EndPoint:oss地域地址,官方文档中已经说明:访问域名和数据中心_对象存储 OSS-阿里云帮助中心
阿里云OSS Bucket:创建Bucket名称
第三步写Controller文件
model类
//展示页需要的实体类
@Data
public class FileInfo {
private String name;
private String url;
}
//上传图片需要的实体类
@Data
public class UploadInfo {
private String name;
private String base64;
}
controller
@RestController
@RequestMapping("/api/upload")
public class UploadController {
@Autowired
Aliossupload aliossupload;
@PostMapping
//上传图片其中用到了加密
public String upload(@RequestBody UploadInfo uploadInfo) throws Exception {
// 获取上传信息的文件名
String name = uploadInfo.getName();
// 在文件名前添加当前时间毫秒数和"_"
name = System.currentTimeMillis() + "_" + name;
// 获取上传信息的base64编码字符串
String base64 = uploadInfo.getBase64();
// 将base64编码字符串按照"base64,"分割成字符串数组
String[] strArray = StrUtil.splitToArray(base64, "base64,");
// 解码base64编码字符串并得到字节数组
byte[] bytes = Base64.decode(strArray[1]);
// 将字节数组写入到文件中
// File file = FileUtil.writeBytes(bytes,name);
// 调用阿里oss上传方法上传文件,并获取上传后的文件url
// 返回文件的url
return Aliossupload.uploadFile(name, bytes);
}
//图片展示
@GetMapping
public List<FileInfo> upload() {
return Aliossupload.getupdate();
}
}
如果你感觉好的话就点赞关注,你的关注将是我更新的动力谢谢