阿里云OSS入门与Java集成
什么是对象存储OSS?
对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务设计可用性不低于99.995%。OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
对象存储OSS提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景:
存储类型 | |
---|---|
标准存储类型 | 高持久、高可用、高性能的对象存储服务,支持频繁的数据访问。是各种社交、分享类的图片、音视频应用、大型网站、大数据分析的合适选择。 |
低频访问存储类型 | 适合长期保存不经常访问的数据(平均每月访问频率1到2次)。存储单价低于标准类型,适合各类移动应用、智能设备、企业数据的长期备份,支持实时数据访问。 |
归档存储类型 | 适合需要长期保存(建议半年以上)的归档数据,在存储周期内极少被访问,数据进入到可读取状态需要1分钟的解冻时间。适合需要长期保存的档案数据、医疗影像、科学资料、影视素材。 |
冷归档存储类型 | 适合需要超长时间存放的极冷数据。例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等。 |
适用场景:
- 静态网站内容和音视频的存储与分发
- 静态网站托管
- 计算和分析的数据存储仓库
- 数据备份和归档
如何选购?
进入阿里云官网首页 → 产品 → 存储 → 对象存储OSS
首次进入后需要开通OSS服务,开通后进入购买页选择地域、规格、时长等。如果只是个人建站学习的话40G足矣,价格也很便宜,按需购买即可。
如何与Java集成?
准备工作:
服务开通好了,现在就来与java进行集成吧。首先需要设置一个AccessKey,这个是阿里云的API密钥,用于认证鉴权,具有账户的完全操作权限,请妥善保管。
操作步骤也很简单,进入页面后直接点击[创建 AccessKey]按钮,系统会自动生成一对密钥。
密钥创建好后,还需要创建一个Bucket,供后续使用。
创建步骤如图:
Bucket名称全局共享,不可重复。地域信息、冗余存储等配置按需开启即可。
开始集成:
开发之前需要了解一些基本概念,请访问OSS产品简介-基本概念参阅,就不再赘述了。
好了,闲话一堆,开始真正的集成工作吧。
-
安装SDK
官方提供了三种方式安装SDK(maven中添加依赖、在Eclipse项目中导入JAR包、在Intellij IDEA项目中导入JAR包),我们使用maven方式进行安装。
-
引入maven坐标
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
-
如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> <!-- no more than 2.3.3--> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.3</version> </dependency>
-
-
初始化
OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源。使用Java SDK发起OSS请求,您需要初始化一个OSSClient实例,并根据需要修改ClientConfiguration的默认配置项。
我们创建一个客户端管理类,专门管理与实例化OSS客户端,并将它交由Spring容器管理。
@Component public class OSSClientManager { private final static String ENDPOINT = "oss-cn-hangzhou.aliyuncs.com"; private final static String ACCESS_KEY_ID = "LTAI5tRrk7SWBhLJhc5ccmvq"; private final static String ACCESS_KEY_SECRET = "hxmyht87mlCCp907Syd5mNS2i0ZRiZ"; /** * 获取阿里云OSS客户端实例 * * @return 客户端实例 */ public OSS getOSSClient() { return new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET); } }
ENDPOINT
:在Bucket概览页面copy过来。ACCESS_KEY_ID
ACCESS_KEY_SECRET
:准备工作中生成的密钥对,就不过多解释了。 -
上传文件
客户端初始化好了,我们就来尝试往阿里云OSS中上传一个文件吧。
public void uploadOSSFile() throws IOException { String objectName = "file/cat.jpg"; OSS ossClient = ossClientManager.getOSSClient(); File file = new File("E:\\wlp\\图片\\cat.jpg"); ossClient.putObject("wanglposs", objectName, new ByteArrayInputStream(toByteArray(file))); ossClient.shutdown(); }
objectName
:文件名称,通常是包含后缀名的完整路径,注意不要使用/开头,否则会报The specified object is not valid.
异常。ossClient.shutdown()
:调用后,需要手动关闭客户端,以免造成资源浪费。上传完成后,就可以通过控制台中的文件管理找到这个文件了,如果是图片可以直接在线预览。
-
文件下载
public void downloadOSSFile() { OSS ossClient = ossClientManager.getOSSClient(); OSSObject ossObject = ossClient.getObject("wanglposs", "file/cat.jpg"); try (InputStream content = ossObject.getObjectContent()) { File file = new File("E:\\wlp\\download\\cat.jpg"); Files.copy(content, file.toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { e.printStackTrace(); } ossClient.shutdown(); }
ossClient.getObject
:传入Bucket名称与对象名,返回一个包含文件内容及文件元信息的OSSObject实例。ossObject.getObjectContent
:获取一个文件的输入流,读取输入流可获取其内容。这里使用了try自动关闭流,否则需要手动关闭content.close();
-
列举文件
public void ossFileList() { OSS ossClient = ossClientManager.getOSSClient(); ObjectListing objectListing = ossClient.listObjects("wanglposs"); objectListing.getObjectSummaries().forEach(o -> System.out.println("name:" + o.getKey() + " size:" + o.getSize())); ossClient.shutdown(); }
控制台输出:
name:file/cat.jpg size:35962 name:file/主线停电类型.jpg size:953011 name:file/开发计划(1).xls size:20480
ossClient.listObjects("wanglposs")
:传入bucket名称,返回ObjectListing实例。objectListing.getObjectSummaries()
:获取所有文件的描述信息。 -
删除文件
public void removeOssFile() { OSS ossClient = ossClientManager.getOSSClient(); ossClient.deleteObject("wanglposs", "file/001.jpg"); ossClient.shutdown(); }
ossClient.deleteObject
:传入bucket名称与对象名称执行删除。
结束语
以上列举了阿里云OSS的相关介绍与最基本的java集成操作,更深入的操作请自行参阅阿里云OSS帮助文档
本文作者:漆原Blog
本文链接:https://www.cnblogs.com/7moon/p/14658723.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步