一、OSS

1.1 OSS是什么
阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。
目前企业级开发,主流的资源存储解决方案,首选:云服务,阿里云-OSS、七牛云-KODO
https://www.aliyun.com/product/oss?spm=5176.19720258.J_8058803260.33.e9392c4aUCQrQD
1.2 OSS的存储类型

1.3 OSS的特点
提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性
1.4 OSS的应用场景
1.数据迁移


2.作为数据湖使用

3.数据存储和管理

4.数据处理平台

5.灾备与备份

1.5 OSS核心概念
1.5.1.存储空间(Bucket)

存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

● 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。
● 每个用户可以拥有多个存储空间。
● 存储空间的名称在OSS范围内必须是全局唯一的,一旦创建之后无法修改名称。
● 存储空间内部的对象数目没有限制。
存储空间的命名规范如下:
● 只能包括小写字母、数字和短划线(-)。
● 必须以小写字母或者数字开头和结尾。
● 长度必须在3~63字符之间。

1.5.2 对象(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元信息(Object
Meta),用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。
对象的生命周期是从上传成功到被删除为止。在整个生命周期内,除通过追加方式上传的Object可以通过继续追加上传写入数据外,其他方式上传的Object内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。

对象的命名规范如下:

● 使用UTF-8编码。
● 长度必须在1~1023字符之间。
● 不能以正斜线(/)或者反斜线(\)开头。

1.5.3 Region(地域)

Region表示OSS的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建Bucket。一般来说,距离用户更近的Region访问速度更快。
Region是在创建Bucket的时候指定的,一旦指定之后就不允许更改。该Bucket下所有的Object都存储在对应的数据中心,目前不支持Object级别的Region设置。

1.5.4 Endpoint(访问域名)

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful
API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。例如杭州Region的外网Endpoint是oss-cn-hangzhou.aliyuncs.com,内网Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。

1.5.5 强一致性

Object操作在OSS上具有原子性,操作要么成功要么失败,不会存在有中间状态的Object。OSS保证用户一旦上传完成之后读到的Object是完整的,OSS不会返回给用户一个部分上传成功的Object。
Object操作在OSS同样具有强一致性,用户一旦收到了一个上传(PUT)成功的响应,该上传的Object就已经立即可读,并且Object的冗余数据已经写成功。不存在一种上传的中间状态,即read-after-write却无法读取到数据。对于删除操作也是一样的,用户删除指定的Object成功之后,该Object立即变为不存在。

1.6 OSS VS 文件系统

二、OSS的使用


使用步骤:
1.开通OSS服务
2.创建存储空间

3.编写代码,实现OSS存储

2.2 代码实现OSS
1.依赖jar

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.13.0</version>
</dependency>

2.封装工具类

public class AliOssUtil {// Region请按实际情况填写public static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。public static final String KEY = "";public static final String KEYSECFET = "";//存储空间名称public static final String BUCKET="data215";//客户端对象,用于管理存储空间和文件等OSS资源,可以有一个或多个OSSClient。OSSClient可以并发使用public static OSS ossClient;static {ossClient= new OSSClientBuilder().build(ENDPOINT, KEY, KEYSECFET);}/*** 资源上传* @param objname 对象名称* @param data 数据内容* @param urlDate 访问地址的失效时间* @return 访问地址*/public static String upload(byte[] data,String objname,Date urlDate){//1.校验对象名是否存在if(!checkName(objname)) {//2.上传资源到oss服务器PutObjectResult result = ossClient.putObject(BUCKET, objname, new ByteArrayInputStream(data));//3.验证上传的结果if (StringUtils.hasLength(result.getETag())) {//4.成功,返回访问地址return createURL(objname, urlDate);}}return null;}/*** 生成OSS的访问地址* @param objname oss对象名称* @param date 访问地址的有效期*/public static String createURL(String objname, Date date){return ossClient.generatePresignedUrl(BUCKET,objname,date).toString();}/*** 验证对象名是否存在* @return 如果返回值为true,则文件存在,否则存储空间或者文件不存在*/public static boolean checkName(String objname){return ossClient.doesObjectExist(BUCKET,objname);}/*** 删除OSS文件*/public static boolean del(String objname){ossClient.deleteObject(BUCKET,objname);return true;}

3.单元测试

public class OssTest {@Testpublic void t1() throws Exception {FileInputStream fis=new FileInputStream("H:\\图片\\2.jpg");ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] data=new byte[1024];int len=0;while ((len=fis.read(data))!=-1){baos.write(data,0,len);}//上传Calendar calendar=Calendar.getInstance();calendar.add(Calendar.YEAR,1);System.err.println(AliOssUtil.upload(baos.toByteArray(),"20210830_2.jpg",calendar.getTime()));}@Testpublic void t2(){Calendar calendar=Calendar.getInstance();calendar.add(Calendar.YEAR,1);System.err.println(AliOssUtil.createURL("20210830_2.jpg",calendar.getTime()));}
}

2.3 基于OSS实现图片上传
1.依赖jar

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.13.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency>

2.实现配置

spring:  servlet:multipart:max-file-size: 10MB #单个文件上限max-request-size: 50MB #一次请求的总文件上限

3.实现上传接口

 public R uploadImg(MultipartFile file) throws IOException {//1.校验if(!file.isEmpty()){//2.获取上传的文件名String fn=file.getOriginalFilename();//3.获取上传的文件内容byte[] data=file.getBytes();//4.生成url的有效期Date date= DateUtil.getTime(1);//4.将资源上传给OSSString url= AliOssUtil.upload(data,fn,date);//5.验证上传是否成功if(StringUtils.hasLength(url)){//6.上传成功,记录操作日志OssLog log=new OssLog(AliOssUtil.BUCKET,fn,url,1,new Date(),date);dao.save(log);//返回return R.ok(log);}}return R.fail();}

4.修复问题
1.文件名相同的问题
2.文件名过长

/*** 实现文件名重命名,并保证文件名的长度不超过*/public static String rename(String fileName){//1.验证长度if(fileName.length()>20){//2.如果超过,截取,从后往前截取,保留后缀名fileName=fileName.substring(fileName.length()-20);}//3.重命名 UUIDreturn UUID.randomUUID().toString().replaceAll("-","")+"_"+fileName;}
public R uploadImg(MultipartFile file) throws IOException {//1.校验if(!file.isEmpty()){//2.获取上传的文件名String fn= FileUtil.rename(file.getOriginalFilename());//3.获取上传的文件内容byte[] data=file.getBytes();//4.生成url的有效期Date date= DateUtil.getTime(1);//4.将资源上传给OSSString url= AliOssUtil.upload(data,fn,date);//5.验证上传是否成功if(StringUtils.hasLength(url)){//6.上传成功,记录操作日志OssLog log=new OssLog(AliOssUtil.BUCKET,fn,url,1,new Date(),date);dao.save(log);//返回return R.ok(log);}}return R.fail();}

5.运行测试

Aliyun-OSS海量存储相关推荐

  1. Laravel 使用 Aliyun OSS 云存储

    对象存储 ( Object Storage Service, 简称 OSS ) OSS 相信大家都听过, 它是阿里云对外提供的海量, 安全和高可靠的云存储服务. 大家可以把自己网站的资源存上面加快自己 ...

  2. 阿里云 OSS 对象存储简单使用【随笔】

    Aliyun OSS 对象存储的使用 官方文档:https://help.aliyun.com/document_detail/32008.html?spm=a2c4g.11186623.6.916. ...

  3. 阿里云oss对象存储的使用

    1.介绍 对象存储服务(Object Storage Service,OSS)是一种海量.安全.低成本.高可靠的云存储 服务,适合存放任意类型的文件.容量和处理能力弹性扩展,多种存储类型供选择,全面优 ...

  4. 阿里云OSS对象存储

    官方定义: 阿里云对象存储OSS(Object Storage Service)是一款海量.安全.低成本.高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久层,99.995% ...

  5. 图片上传怎么搞?!阿里云OSS对象存储教你快速实现!

    一. 需求背景 小白: 辉哥,我想在项目中实现图片上传,不知道有没有好用的第三方文件上传技术呢? 辉哥:那多了去了,阿里.腾讯.百度.七牛云等都有文件上传技术,你从中随便挑一个,辉哥这就给你安排. 小 ...

  6. SpirngBoot上传图片的两种方式——本地——OSS对象存储

    SpirngBoot实现文件上传功能 Spring Boot实现文件上传功能 1. 文件上传到本地 1.1 核心配置文件application.properties 1.2 文件上传控制层FileCo ...

  7. 6、阿里云OSS对象存储手把手学习及企业使用方案

    文章目录 1.什么是分布式文件系统 2.图片存储解决方案 3.阿里云OSS对象存储 3.1.开通oss访问 3.2.购买服务 3.3.基本概念 3.4.创建一个bucket 3.5.创建AccessK ...

  8. 阿里云OSS | 对象存储服务快速入门 | 参考官方文档实现使用JavaSDK上传文件 | 本地上传与web上传案例

    参考文档 : 点击查看 文章目录 运行环境 一.OSS相关概念 1.1 Storage Class 存储类型 1.2 Bucket 存储空间 1.3 Object 对象 1.4 Region 地域 1 ...

  9. Java集成第三方oss对象存储——文档篇

    Java集成第三方oss对象存储--文档篇 相关文章 简介 官方文档 应用场景 Web 配置操作 添加依赖 创建存储空间 相关文章 简介 阿里云对象存储OSS(Object Storage Servi ...

最新文章

  1. 【图论】用一道题从本质上讲清楚Floyd算法
  2. pyqt5入门教程(七)
  3. 关于IOCP完成端口的文章
  4. VTK:网格之HyperTreeGridSource
  5. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - F. 加法变乘法
  6. ASCII码表在线查询进制转换
  7. 解决6410 WINCE6 应用层调用SetSystemPowerState api关机无效的问题
  8. 特老的文章:三层应该怎么划分。不知大家还有用否
  9. ORBSLAM的ORB特征到底从哪儿来?
  10. java 查找素数_在Java中查找和检查素数
  11. java安装包的大概组成部分
  12. 计算机配置单性价比高,i5电脑主机配置单,性价比高
  13. c语言递归阶乘汉诺塔文曲星游戏词典制作文件调用整合
  14. Entity Framework介绍
  15. BLE学习(4):蓝牙地址类型和设备的隐私
  16. CV2逐步学习-2:cv2.GaussianBlur()详解
  17. scratch-blocks教程(一)
  18. BP神经网络的非线性函数拟合
  19. Pytorch lstm中batch_first 参数理解使用
  20. android平板内存清理,需要给安卓手机清理内存么?不用!

热门文章

  1. TypeScript——Web前端开发的救赎
  2. 16-MySQL基础语法(数据库)
  3. Android开发初体验之百度地图开发(3)
  4. C++中的decltype
  5. JavaSE、JavaEE、JavaME三者之间的关系与区别
  6. 室内光缆与室外电力光缆特点简介
  7. 微信平台:数字藏品平台出现二级交易市场违规封号
  8. 手动安装 Spyder 4.0 beta 版
  9. 我的【藏羚头条】开发运营经验
  10. 计算机打印机能不能取消正在,删除HP打印机驱动程序. 打印机驱动程序正在使用中,无法删除...