本帖最后由 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实例: - String endpoint = "oss-cn-hangzhou.aliyuncs.com";
- String accessKeyId = "*** Provide your AccessKeyId ***";
- String accessKeySecret = "*** Provide your AccessKeySecret ***";
- // Create a new OSSClient instance
- OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
- // Do some operations with the instance...
- // Shutdown the instance to release any allocated resources
- client.shutdown();
复制代码
提示: - 当不再向OSS发送HTTP请求时,请显示调用OSSClient#shutdown释放任何已经分配的资源
- 上述代码中,accessKeyId与accessKeySecret变量值 由系统分配给用户,称为ID对,用于标识用户,可能属于您的阿里云账号或者RAM账号为访问OSS做签名验证。
新建BucketBucket是OSS全局命名空间,相当于数据的容器,可以存储若干Object。 Bucket命名规范- 只能包括小写字母,数字和短横线(-)
- 必须以小写字母或者数字开头
- 长度必须在3-63字节之间
以下代码展示如何新建一个Bucket: - // Create a new OSSClient instance
- OSSClient client = new OSSClient(...);
- String bucketName = "my-oss-bucket";
- client.createBucket(bucketName);
复制代码
判断Bucket是否存在在创建Bucket之前,您可以使用OSSClient#doesBucketExist接口判断该Bucket是否已存在。 以下代码展示如何判断指定Bucket是否存在: - boolean exists = client.doesBucketExist(bucketName);
复制代码
列举Bucket使用OSSClient#listBuckets列举指定用户的Bucket列表,并可以指定prefix、marker、maxkeys等参数限定返回的结果列表。 以下代码展示如何采用简单的方式列举指定用户的Bucket列表: - for (Bucket bkt : client.listBuckets()) {
- System.out.println(" - " + bkt.getName());
- }
复制代码
删除Bucket以下代码展示如何删除某一Bucket: - client.deleteBucket(bucketName);
复制代码
提示: - 如果存储空间不为空(存储空间中有文件或者分片上传碎片),则存储空间无法删除
- 必须先删除存储空间中的所有文件后,存储空间才能成功删除。
上传本地文件(简单上传)- String key = "MyObjectKey";
- String localFilePath = "*** Provide local file path ***";
- client.putObject(bucketName, key, new File(localFilePath));
复制代码
简单的下载文件我们可以通过以下代码将文件读取到一个流中: - // 获取Object,返回结果为OSSObject对象
- OSSObject object = client.getObject(bucketName, key);
- // 获取Object Metadata
- ObjectMetadata metadata = object.getObjectMetadata();
- // 获取Object的输入流
- InputStream objectContent = object.getObjectContent();
- // 处理Object
- ...
- // 关闭流,请注意,需要显式关闭,否则会造成资源泄露。
- objectContent.close();
复制代码
提示: - OSSObject实例包含文件所在的存储空间(Bucket)、文件的名称、Object Metadata以及一个输入流。
- 通过操作输入流将文件的内容读取到文件或者内存中。而Object Metadata包含ETag、HTTP Header及自定义的元信息。
删除一个文件:
- client.deleteObject(bucketName, key);
复制代码
删除多个文件:
- List<String> keys = new ArrayList<String>();
- keys.add("key0");
- keys.add("key1");
- keys.add("key2");
- DeleteObjectsResult deleteObjectsResult = client.deleteObjects(
- new DeleteObjectsRequest(bucketName).withKeys(keys));
- List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
复制代码
简单列出文件
- // 获取指定bucket下的所有Object信息
- ObjectListing listing = client.listObjects(bucketName);
- // 遍历所有Object
- for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
- System.out.println(objectSummary.getKey());
- }
复制代码
注意: - 默认情况下,如果存储空间中的文件数量大于100,则只会返回100个文件, 且返回结果中 IsTruncated 为 true,并返回 NextMarker 作为下此读取的起点。
- 若想增大返回文件数目,可以修改MaxKeys参数,或者使用Marker参数分次读取。
|