阿里云OSS(对象存储服务)简介

最近公司想要使用阿里云OSS来存储精准客流图片,所以提前熟悉一下,做一个记录

注:阿里云官方文档已经很详细的阐述了OSS、以及开发流程,本文大多都是参考官方文档

OSS官方介绍地址:https://help.aliyun.com/document_detail/31947.html

阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。

一、产品介绍

1、什么是OSS

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。它具有与平台无关的RESTful API接口,能够提供99.999999999%(11个9)的数据可靠性和99.99%的服务可用性。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

您可以使用阿里云提供的API/SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准类型(Standard)的阿里云OSS服务作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问类型(Infrequent Access)和归档类型(Archive)的阿里云OSS服务作为不经常访问数据的备份和归档。

2、优势

对比项
对象存储OSS
自建服务器存储
可靠性
  • 服务设计可用性不低于99.99%。
  • 规模自动扩展,不影响对外服务。
  • 数据设计持久性不低于99.999999999%。
  • 数据自动多重冗余备份。
  • 受限于硬件可靠性,易出问题,一旦出现磁盘坏道,容易出现不可逆转的数据丢失。
  • 人工数据恢复困难、耗时、耗力。
安全
  • 提供企业级多层次安全防护。
  • 多用户资源隔离机制,支持异地容灾机制。
  • 提供多种鉴权和授权机制及白名单、防盗链、主子账号功能。
  • 需要另外购买清洗和黑洞设备。
  • 需要单独实现安全机制。
成本
  • 多线BGP骨干网络,无带宽限制,上行流量免费。
  • 无需运维人员与托管费用,0成本运维。
  • 存储受硬盘容量限制,需人工扩容。
  • 单线或双线接入速度慢,有带宽限制,峰值时期需人工扩容。
  • 需专人运维,成本高。
数据处理能力 提供图片处理、音视频转码、内容加速分发、鉴黄服务、归档服务等多种数据增值服务,并不断丰富中。 需要额外采购,单独部署。

其他各项优势:

  • 方便、快捷的使用方式
    • 提供标准的RESTful API接口、丰富的SDK包、客户端工具、控制台。您可以像使用文件一样方便地上传、下载、检索、管理用于Web网站或者移动应用的海量数据。
    • 不限文件数量和大小。您可以根据所需存储量无限扩展存储空间,解决了传统硬件存储扩容问题。
    • 支持流式写入和读出。特别适合视频等大文件的边写边读业务场景。
    • 支持数据生命周期管理。您可以自定义将到期数据批量删除或者转入到低成本的归档服务。
  • 强大、灵活的安全机制
    • 灵活的鉴权,授权机制。提供STS和URL鉴权和授权机制,以及白名单、防盗链、主子账号功能。
    • 提供用户级别资源隔离机制和多集群同步机制(可选)。
  • 丰富、强大的增值服务
    • 图片处理:支持jpg、png、bmp、gif、webp、tiff等多种图片格式的转换,以及缩略图、剪裁、水印、缩放等多种操作。
    • 音视频转码:提供高质量、高速并行的音视频转码能力,让您的音视频文件轻松应对各种终端设备。
    • 内容加速分发:OSS作为源站,搭配CDN进行加速分发,具有稳定、无回源带宽限制、性价比高、一键配置的特点。

3、功能概览

应用场景
功能描述
参考
上传文件 上传文件到OSS前,必须先在阿里云的任意一个地域创建一个存储空间。创建存储空间后,您可以上传任意文件到该存储空间。
搜索文件 您可以在存储空间中搜索文件或文件夹。 搜索文件
查看或下载文件 您可以通过文件 URL 查看或者下载文件。 获取文件访问地址
删除文件或文件夹 您可以删除单个或者多个文件/文件夹,还可以删除分片上传产生的碎片,节省您的存储空间。
控制OSS资源的访问权限 OSS 为权限控制提供访问控制列表(ACL)。ACL是授予存储空间和对象访问权限的访问策略。 您可以在创建存储空间或上传对象时配置ACL,也可以在创建存储空间或上传对象后的任意时间内修改ACL。
记录OSS资源的访问信息 您可以开启日志功能自动记录对OSS资源的详细访问信息。 设置访问日志记录
防止OSS上的数据被其他人盗链 您可以为您的存储空间设置防盗链,包括 Referer 字段的白名单和是否允许 Referer 字段为空的请求访问。 设置防盗链
使用自定义域名访问OSS资源 您可以将自定义域名绑定到OSS存储空间,然后使用自定义域名访问存储空间中的数据。您还可以启用阿里云CDN服务加速对存储空间中数据的访问。 绑定自定义域名
跨域资源共享 OSS提供在HTML5协议中跨域资源共享(CORS)的设置。 CORS允许在一个域名中加载的客户端Web应用程序与另一个域中的资源进行交互。 设置跨域访问
在指定时间自动批量删除文件 您可以定义和管理存储空间内所有文件或特定文件的生命周期。例如,达到指定天数后,将特定文件删除或者转换到其他价格更低的存储类型。 管理对象生命周期
将一个存储空间的数据跨区域复制到另一个存储空间 跨区域复制是对不同区域的存储空间中的文件进行自动异步复制。 跨区域复制将新创建的文件、文件更新和文件删除等操作从源存储空间复制到不同区域的目标存储空间。 管理跨区域复制
获取源数据内容 您可以创建回源规则来定义通过镜像还是重定向获取源数据。回源规则通常用于数据热迁移和重定向特定请求。 管理回源设置
修改 HTTP头 设置一个或多个 HTTP 头。 设置文件HTTP头
查看资源使用情况 您可以查看OSS服务使用情况的实时信息,如基本的系统运行状态和性能。 监控服务概览
处理OSS中存储的图片 您可以对OSS中存储的图片执行不同的操作,例如格式转换、裁剪、缩放、旋转、水印和样式封装。 快速使用OSS图片服务
使用API和SDK OSS 提供 RESTful API和各种语言的SDK开发包。

4、使用场景

4.1图片和音视频等应用的海量存储

OSS可用于图片、音视频、日志等海量文件的存储。各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。OSS支持流式写入和文件写入两种方式。

4.2网页或者移动应用的静态和动态资源分离

利用BGP带宽,OSS可以实现超低延时的数据直接下载。也可以配合阿里云CDN加速服务,为图片、音视频、移动应用的更新分发提供最佳体验。

4.3云端数据处理

上传文件到OSS后,可以配合媒体转码服务(MTS)和图片处理服务(IMG)进行云端的数据处理。

5、使用限制


限制项
说明
归档存储 已经存储的数据从冷冻状态恢复到可读取状态需要1分钟的等待时间。
存储空间(bucket)
  • 同一用户创建的存储空间总数不能超过30个。
  • 存储空间一旦创建成功,名称、所处地域、存储类型不能修改。
  • 单个存储空间的容量不限制。
上传文件
  • 通过控制台上传、简单上传表单上传追加上传的文件大小不能超过5GB,要上传大小超过5GB的文件必须使用断点续传方式。
  • 断点续传方式上传的文件大小不能超过48.8TB。
  • 用户在一个Region内的上传或下载的带宽缺省阈值为:中国大陆Region 10Gbit/s、其他Region 5Gbit/s。如达到该阈值,用户会收到 DownloadTrafficRateLimitExceeded 或 UploadTrafficRateLimitExceeded 错误响应。如您的业务(如大数据离线处理等)有更大的带宽需求(如10Gbit/s~100Gbit/s),请联系售后技术支持。
  • OSS支持上传同名文件,但会覆盖已有文件。
删除文件
  • 文件删除后无法恢复。
  • 控制台批量删除文件的上限为1000个,更大批量的删除必须通过API或SDK实现。
域名绑定
  • 账号必须在阿里云官网完成实名认证。
  • 国内Region绑定的域名必须在工信部备案, 海外Region的域名绑定不需要在工信部备案。
  • 每个存储空间最多可以绑定20个域名。
生命周期 每个存储空间的生命周期配置最多可容纳1000条规则。
图片处理 对于原图:
  • 图片格式只能是:jpg、png、bmp、gif、webp、tiff。
  • 文件大小不能超过20MB。
  • 使用图片旋转或裁剪时图片的宽或者高不能超过4096。
对于缩略后的图:
  • 宽与高的乘积不能超过4096x4096。
  • 单边长度不能超过4096。
资源包
  • 只支持归属地域使用,不支持其他地域使用。
  • 不支持更换地域。
  • 同类型资源包不支持叠加,例如无法在同地域同时段购买两个存储包。
  • 请求次数和低频/归档存储不支持包年包月付费。

二、开发指南

1、基本概念介绍

1.1存储空间(Bucket)

存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。您可以设置和修改存储空间属性用来控制地域、访问权限、生命周期等,这些属性设置直接作用于该存储空间内所有对象,因此您可以通过灵活创建不同的存储空间来完成不同的管理功能。

  • 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。
  • 每个用户可以拥有多个存储空间。
  • 存储空间的名称在 OSS 范围内必须是全局唯一的,一旦创建之后无法修改名称。
  • 存储空间内部的对象数目没有限制。

存储空间的命名规范如下:

  • 只能包括小写字母、数字和短横线(-)。
  • 必须以小写字母或者数字开头和结尾。
  • 长度必须在3-63字节之间。

1.2对象/文件(Object)

对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一个键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,对象信息不可变更。重复上传同名的对象会覆盖之前的对象,因此,OSS 不支持修改文件的部分内容等操作。

OSS 提供了追加上传功能,用户可以使用该功能不断地在Object尾部追加写入数据。

对象的命名规范如下:

  • 使用UTF-8编码。
  • 长度必须在1-1023字节之间。
  • 不能以“/”或者“\”字符开头。

1.3Region(地域)

Region 表示 OSS 的数据中心所在的地域,物理位置。用户可以根据费用、请求来源等综合选择数据存储的 Region。一般来说,距离用户更近的 Region 访问速度更快。详细请查看 OSS 已经开通的 Region

Region是在创建 Bucket 的时候指定的,一旦指定之后就不允许更改,该 Bucket 下所有的 Object 都存储在对应的数据中心,目前不支持 Object 级别的 Region 设置。

1.4Endpoint(访问域名)

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

1.5AccessKey(访问密钥)

AccessKey,简称 AK,指的是访问身份验证中用到的 AccessKeyId 和AccessKeySecret。OSS 通过使用 AccessKeyId 和 AccessKeySecret 对称加密的方法来验证某个请求的发送者身份。AccessKeyId 用于标识用户,AccessKeySecret 是用户用于加密签名字符串和 OSS 用来验证签名字符串的密钥,其中 AccessKeySecret 必须保密。对于 OSS 来说,AccessKey 的来源有:

  • Bucket 的拥有者申请的 AccessKey。
  • 被 Bucket 的拥有者通过 RAM 授权给第三方请求者的 AccessKey。
  • 被 Bucket 的拥有者通过 STS 授权给第三方请求者的 AccessKey。

更多 AccessKey 介绍请参见 访问控制

1.6强一致性

Object 操作在 OSS 上具有原子性,操作要么成功要么失败,不会存在有中间状态的Object。OSS 保证用户一旦上传完成之后读到的 Object 是完整的,OSS 不会返回给用户一个部分上传成功的 Object。

Object 操作在 OSS 上同样具有强一致性,用户一旦收到了一个上传(PUT)成功的响应,该上传的 Object 就已经立即可读,并且数据的三份副本已经写成功。不存在一种上传的中间状态,即 read-after-write 却无法读取到数据。对于删除操作也是一样的,用户删除指定的 Object 成功之后,该 Object 立即变为不存在。

强一致性方便了用户架构设计,可以使用跟传统存储设备同样的逻辑来使用OSS,修改立即可见,无需考虑最终一致性带来的各种问题。

2、存储类型

OSS提供标准、低频访问、归档三种存储类型,全面覆盖从热到冷的各种数据存储场景。

  • 标准存储类型提供通用的对象存储服务,适合频繁访问、有热点存在的各类音视频、图片、网站静态资源的存储,支持高吞吐计算场景,适合各类计算资源的存储。
  • 低频访问存储类型适合长期保存、较少访问的数据(平均每月访问频率1到2次),适合各类移动应用、智能设备、企业数据的备份,低频访问支持实时数据访问。
  • 归档存储类型在三种存储类型中单价最低,适合需要长周期保存的档案数据、医疗影像、科学资料、影视素材,能有效优化长期存储成本。保存为归档存储类型的数据,恢复到可读取状态需要等待1分钟的解冻时间。

2.1标准存储类型(Standard)

OSS标准存储类型提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问。OSS高吞吐和低延时的服务响应能力能够有效支持各种热点类型数据的访问。标准存储类型是各种社交、分享类的图片、音视频应用、大型网站、大数据分析的合适选择。

关键特性:

  • 99.999999999%的数据可靠性
  • 按照99.99%服务可用性设计
  • 低延时、高吞吐的访问性能
  • 支持HTTPS加密传输
  • 支持图片处理

2.2低频访问存储类型(Infrequent Access)

OSS低频访问存储类型适合长期保存不经常访问的数据,存储单价低于标准类型,适合各类移动应用、智能设备、企业数据的长期备份。低频访问存储类型的Object有最短存储时间,存储时间短于30天的文件提前删除会产生一定费用。低频访问存储Object有最小计量空间,Object大小低于64KB,会按照64KB计算存储空间,数据获取会产生费用。

关键特性:

  • 99.999999999%的数据可靠性
  • 按照99.99%服务可用性设计
  • 支持实时访问
  • 支持HTTPS加密传输
  • 支持图片处理
  • 有最短存储时间和最小计量空间

2.3归档存储类型(Archive)

OSS归档存储类型在三种存储类型中单价最低,适合需要长期保存(建议半年以上)的归档数据,在存储周期内极少被访问,数据进入到可读取状态需要等待1分钟的解冻时间。适合需要长期保存的档案数据、医疗影像、科学资料、影视素材。归档存储类型的Object有最短存储时间,存储时间短于60天的文件提前删除会产生一定费用。归档类型存储Object有最小计量空间,Object大小低于64KB,会按照64KB计算存储空间,数据获取会产生费用。

关键特性:

  • 99.999999999%的数据可靠性
  • 按照99.99%服务可用性设计
  • 已经存储的数据从冷冻状态恢复到可读取状态需要1分钟的等待时间
  • 支持HTTPS加密传输
  • 不支持图片处理
  • 有最短存储时间和最小计量空间

2.4存储类型对比

对比指标
标准存储类型
低频访问存储类型
归档存储类型
数据可靠性 99.999999999% 99.999999999% 99.999999999%
服务设计的可用性 99.99% 99.99% 99.99% (数据解冻之后)
对象最小计量大小 按照对象实际大小计算 64KB 64KB
最少存储时间 无最短存储实际要求 30天 60天
数据取回费用 不收取数据取回费用 按实际获取的数据收取,单位GB 按实际解冻的数据量收取,单位GB
数据访问特点 实时访问 ms延迟 实时访问 ms延迟 数据需要先解冻,解冻完成后才能读取,解冻时间需要1分钟时间
图片处理 支持 支持 支持,但需要先解冻

3、实例Demo

3.1环境搭建

安装JDK(1.6以上),加入maven依赖或者导入jar包

依赖如下:

<dependency>

  <groupId>com.aliyun.oss</groupId>

  <artifactId>aliyun-sdk-oss</artifactId>

  <version>2.8.2</version>

</dependency>

官方jar下载地址:aliyun_java_sdk_20171127.zip,解压,拿到aliyun-sdk-oss-<versionId>.jar ,放入你的工程,Build Path

3.2文本以流的形式上传至存储空间

 
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
import java.io.ByteArrayInputStream;
import java.io.InputStream;
 
/**
 * @Description: OSS存储空间内上传文本对象
 * @Author: Ni Fujia
 * @CreateDate: 2018/6/14 14:56
 **/
public class UploadTextOSS {
    static Logger logger = Logger.getLogger(UploadTextOSS.class);
    private static String endpoint = "endpoint";
    private static String accessKeyId = "accessKeyId";
    private static String accessKeySecret = "accessKeySecret";
    // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
    private static String bucketName = "winner-image";
    // Object命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    private static String objectName = "winner-first-key";
    public static void main(String[] args) {
        PropertyConfigurator.configure("src/log4j.properties");
        logger.info("开始...");
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        try {
            // 判断Bucket是否存在。
            if (ossClient.doesBucketExist(bucketName)) {
                logger.info("您已经创建Bucket:" + bucketName + "。");
            } else {
                logger.info("您的Bucket不存在,创建Bucket:" + bucketName + "。");
                // 创建Bucket。
                ossClient.createBucket(bucketName);
            }
 
            // 查看Bucket信息。
            BucketInfo info = ossClient.getBucketInfo(bucketName);
            logger.info("Bucket " + bucketName + "的信息如下:");
            logger.info("\t数据中心:" + info.getBucket().getLocation());
            logger.info("\t创建时间:" + info.getBucket().getCreationDate());
            logger.info("\t用户标志:" + info.getBucket().getOwner());
 
            // 把字符串存入OSS
            String str = "这是要存入对象的内容啊!";
            InputStream is = new ByteArrayInputStream(str.getBytes());
            ossClient.putObject(bucketName, objectName, is);
            logger.info("Object:" + objectName + "存入OSS成功。");
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
 
        logger.info("已完成...");
 
    }
}

3.3上传图片至存储空间

 
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
import java.io.File;
import java.util.List;
/**
 * @Description:OSS存储空间内上传图片
 * @Author:Ni Fujia
 * @CreateDate:2018/6/14 14:56
 **/
public class UploadImageOSS {
 
    static Logger logger = Logger.getLogger(UploadImageOSS.class);
    private static String endpoint = "endpoint";
    private static String accessKeyId = "accessKeyId";
    private static String accessKeySecret = "accessKeySecret";
    // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
    private static String bucketName = "winner-image";
    // Object命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    private static String objectName = "微信登录流程图.png";
 
    public static void main(String[] args) {
 
        PropertyConfigurator.configure("src/log4j.properties");
        logger.info("开始...");
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        try {
            // 判断Bucket是否存在。
            if (ossClient.doesBucketExist(bucketName)) {
                logger.info("您已经创建Bucket:" + bucketName + "。");
            } else {
                logger.info("您的Bucket不存在,创建Bucket:" + bucketName + "。");
                // 创建Bucket。
                ossClient.createBucket(bucketName);
            }
            // 查看Bucket信息。
            BucketInfo info = ossClient.getBucketInfo(bucketName);
            logger.info("Bucket " + bucketName + "的信息如下:");
            logger.info("\t数据中心:" + info.getBucket().getLocation());
            logger.info("\t创建时间:" + info.getBucket().getCreationDate());
            logger.info("\t用户标志:" + info.getBucket().getOwner());
 
            //向存储空间中上传图片
            //本地文件的名称
            ossClient.putObject(bucketName, objectName, new File("src/微信登录流程图.png"));
            logger.info("image:" + objectName + "存入OSS成功..........");
 
            // 查看Bucket中的Object
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            List<OSSObjectSummary> objectSummary = objectListing.getObjectSummaries();
            logger.info(bucketName+"中有如下Object:");
            for (OSSObjectSummary object : objectSummary) {
                System.out.println("\t" + object.getKey());
            }
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
        logger.info("已完成...");
 
    }
}

3.4从存储空间下载图片或文件

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
import java.io.*;
 
/**
 * @Description: 从OSS下载文件
 * @Author: Ni Fujia
 * @CreateDate: 2018/6/14 16:02
 **/
public class DownloadFileOSS {
    static Logger logger = Logger.getLogger(DownloadFileOSS.class);
    private static String endpoint = "endpoint";
    private static String accessKeyId = "accessKeyId";
    private static String accessKeySecret = "accessKeySecret";
    // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
    private static String bucketName = "winner-image";
    // Object命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    private static String objectName = "img01.jpg";
 
    public static void main(String[] args) {
 
        PropertyConfigurator.configure("src/log4j.properties");
        logger.info("开始...");
 
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        try {
            // 判断Bucket是否存在。
            if (ossClient.doesBucketExist(bucketName)) {
                logger.info("您已经创建Bucket:" + bucketName + "。");
            } else {
                logger.info("您的Bucket不存在,创建Bucket:" + bucketName + "。");
                // 创建Bucket。
                ossClient.createBucket(bucketName);
            }
 
            // 查看Bucket信息。
            BucketInfo info = ossClient.getBucketInfo(bucketName);
            logger.info("Bucket " + bucketName + "的信息如下:");
            logger.info("\t数据中心:" + info.getBucket().getLocation());
            logger.info("\t创建时间:" + info.getBucket().getCreationDate());
            logger.info("\t用户标志:" + info.getBucket().getOwner());
 
            // 下载文件
            ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("src/img01_download.jpg"));
            logger.info("下载成功....");
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
 
        logger.info("已完成...");
    }
}

3.5删除存储空间中的图片

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
/**
 * @Description: 删除OSS上的文件
 * @Author: Ni Fujia
 * @CreateDate: 2018/6/14 16:11
 **/
public class DeleteFileOSS {
    static Logger logger = Logger.getLogger(DeleteFileOSS.class);
    private static String endpoint = "endpoint";
    private static String accessKeyId = "accessKeyId";
    private static String accessKeySecret = "accessKeySecret";
    // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
    private static String bucketName = "winner-image";
    // Object命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    private static String objectName = "img01.jpg";
 
    public static void main(String[] args) {
 
        PropertyConfigurator.configure("src/log4j.properties");
        logger.info("开始...");
 
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        try {
            // 判断Bucket是否存在。
            if (ossClient.doesBucketExist(bucketName)) {
                logger.info("您已经创建Bucket:" + bucketName + "。");
            } else {
                logger.info("您的Bucket不存在,创建Bucket:" + bucketName + "。");
                // 创建Bucket。
                ossClient.createBucket(bucketName);
            }
 
            // 查看Bucket信息。
            BucketInfo info = ossClient.getBucketInfo(bucketName);
            logger.info("Bucket " + bucketName + "的信息如下:");
            logger.info("\t数据中心:" + info.getBucket().getLocation());
            logger.info("\t创建时间:" + info.getBucket().getCreationDate());
            logger.info("\t用户标志:" + info.getBucket().getOwner());
 
            // 删除文件
            ossClient.deleteObject(bucketName, objectName);
            logger.info("删除成功....");
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
 
        logger.info("已完成...");
 
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37897502/article/details/80702805