找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2095|回复: 0

阿里云OSS服务(Java-SDK)

[复制链接]
发表于 2016-1-20 16:40:57 | 显示全部楼层 |阅读模式
本帖最后由 sulvto 于 2016-1-20 17:08 编辑

OSS基础功能
用户可以通过以下操作来处理OSS上的数据:
  • 上传文件(上传Object)
  • 下载文件(下载Object)
  • 访问时支持If-Modified-Since和If-Match等HTTP参数
  • 管理存储空间(Bucket):创建、查看、删除Bucket,修改、获取Bucket的访问权限
  • 管理文件(Object):查看、删除、批量删除
快速入门
确认您已经理解OSS的基本概念,如Bucket、Object、Endpoint、AccessKeyId和AccessKeySecret等。
本节您将学到如何快速使用OSS Java SDK进行若干常见操作,如创建存储空间、上传文件、下载文件等。
初始化OSSClient实例
在您向OSS发送任一HTTP请求之前,必须先创建一个OSSClient实例:
  1.         String endpoint = "oss-cn-hangzhou.aliyuncs.com";
  2.         String accessKeyId = "*** Provide your AccessKeyId ***";
  3.         String accessKeySecret = "*** Provide your AccessKeySecret ***";

  4.         // Create a new OSSClient instance
  5.         OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);

  6.         // Do some operations with the instance...

  7.         // Shutdown the instance to release any allocated resources
  8.         client.shutdown();
复制代码



提示:
  • 当不再向OSS发送HTTP请求时,请显示调用OSSClient#shutdown释放任何已经分配的资源
  • 上述代码中,accessKeyId与accessKeySecret变量值 由系统分配给用户,称为ID对,用于标识用户,可能属于您的阿里云账号或者RAM账号为访问OSS做签名验证。
新建Bucket
Bucket是OSS全局命名空间,相当于数据的容器,可以存储若干Object。
Bucket命名规范
  • 只能包括小写字母,数字和短横线(-)
  • 必须以小写字母或者数字开头
  • 长度必须在3-63字节之间
以下代码展示如何新建一个Bucket:
  1.     // Create a new OSSClient instance
  2.     OSSClient client = new OSSClient(...);

  3.     String bucketName = "my-oss-bucket";
  4.     client.createBucket(bucketName);
复制代码




判断Bucket是否存在
在创建Bucket之前,您可以使用OSSClient#doesBucketExist接口判断该Bucket是否已存在。
以下代码展示如何判断指定Bucket是否存在:
  1. boolean exists = client.doesBucketExist(bucketName);
复制代码


列举Bucket
使用OSSClient#listBuckets列举指定用户的Bucket列表,并可以指定prefix、marker、maxkeys等参数限定返回的结果列表。 以下代码展示如何采用简单的方式列举指定用户的Bucket列表:
  1. for (Bucket bkt : client.listBuckets()) {
  2.     System.out.println(" - " + bkt.getName());
  3. }
复制代码



删除Bucket
以下代码展示如何删除某一Bucket:
  1.     client.deleteBucket(bucketName);
复制代码

提示:
  • 如果存储空间不为空(存储空间中有文件或者分片上传碎片),则存储空间无法删除
  • 必须先删除存储空间中的所有文件后,存储空间才能成功删除。

上传本地文件(简单上传)
  1.     String key = "MyObjectKey";
  2.     String localFilePath = "*** Provide local file path ***";
  3.     client.putObject(bucketName, key, new File(localFilePath));
复制代码



简单的下载文件
我们可以通过以下代码将文件读取到一个流中:
  1.     // 获取Object,返回结果为OSSObject对象
  2.     OSSObject object = client.getObject(bucketName, key);

  3.     // 获取Object Metadata
  4.     ObjectMetadata metadata = object.getObjectMetadata();

  5.     // 获取Object的输入流
  6.     InputStream objectContent = object.getObjectContent();

  7.     // 处理Object
  8.     ...

  9.     // 关闭流,请注意,需要显式关闭,否则会造成资源泄露。
  10.     objectContent.close();
复制代码


提示:
  • OSSObject实例包含文件所在的存储空间(Bucket)、文件的名称、Object Metadata以及一个输入流。
  • 通过操作输入流将文件的内容读取到文件或者内存中。而Object Metadata包含ETag、HTTP Header及自定义的元信息。
删除一个文件:
  1. client.deleteObject(bucketName, key);
复制代码

删除多个文件:
  1.     List<String> keys = new ArrayList<String>();
  2.     keys.add("key0");
  3.     keys.add("key1");
  4.     keys.add("key2");

  5.     DeleteObjectsResult deleteObjectsResult = client.deleteObjects(
  6.             new DeleteObjectsRequest(bucketName).withKeys(keys));
  7.     List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
复制代码


简单列出文件
  1.     // 获取指定bucket下的所有Object信息
  2.     ObjectListing listing = client.listObjects(bucketName);

  3.     // 遍历所有Object
  4.     for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  5.         System.out.println(objectSummary.getKey());
  6.     }
复制代码


注意:
  • 默认情况下,如果存储空间中的文件数量大于100,则只会返回100个文件, 且返回结果中 IsTruncated 为 true,并返回 NextMarker 作为下此读取的起点。
  • 若想增大返回文件数目,可以修改MaxKeys参数,或者使用Marker参数分次读取。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表