本文写于 2015年。
当前阿里云 OSS 的情况可能同本文描述的存在偏差。

使用

开通OSS服务

通过控制台开通。

创建Bucket

通过控制台开通,也可以通过调用API开通。

创建过程中,需要设置地域,还要设置权限。

不同地域访问的入口URL不同,值得注意的是,URL还区分公网入口和内网入口。

如青岛节点:

外网地址: oss-cn-qingdao.aliyuncs.com

内网地址: oss-cn-qingdao-internal.aliyuncs.com

公网调用,会收取流量费用,内网地址仅允许所在节点的内网服务器调用,可达到节省流量的效果。

在青岛节点申请名为的test的Bucket。

公网地址:test.oss-cn-qingdao.aliyuncs.com

内网地址:test.oss-cn-qingdao-internal.aliyuncs.com

权限分为三种:

公共读写:任何人均可操作此Bucket中的数据,包括匿名用户,慎用。

公共读:只有此Bucket的拥有者可做写操作,任何人可做读操作,常用。

私有:只有Bucket的拥有者可做读写操作。

申请API

阿里云首页——用户中心——用户中心——我的服务——安全认证——创建Accesskey。

申请过程中,需要输入手机验证码。

下载SDK

python版本:http://aliyunecs.oss-cn-hangzhou.aliyuncs.com/OSS_Python_API_20140509.zip

开发指南:http://aliyun_portal_storage.oss.aliyuncs.com/oss_api/oss_pythondoc/OSS_Python_SDK.pdf

Bucket操作

在控制台和SDK均可实现完整的操作,包括新建和删除Bucket节点,上传、删除、读取Object。

Bucket的使用

网页文件

将静态网站文件上传至Bucket,绑定域名,即可实现访问。

Bucket管理——选择Bucket名称——点击浏览——Bucket属性——域名绑定。

域名绑定方法:下载验证文件,上传至原网站根目录,通过验证后,即可修改原网站域名解析,CNAME到Bucket地址。

CDN加速:开通CDN加速后——CDN域名列表——添加新域名——选择Bucket域名——指定Bucket域名和绑定域名——完成配置。

图片文件

将图片文件上次至Bucket,绑定域名,即可自动实现图片访问域名加速,同时支持服务端图片处理。

根据测试情况,仅支持图片文件,判断图片文件的标准不是后缀名,而是文件内容。

比如将图片文件x.jpg修改为x.txt,依然是正常的,但是将文本文件x.txt修改为x.jgp,是无法访问的。

Bucket管理——选择Bucket名称——点击浏览——Bucket属性——图片管理——域名绑定
域名绑定方式同上。

CDN加速

在域名绑定验证成功后,自动完成配置

生成三个域名:

当前绑定的域名: image.xxx.com

图片服务的域名: xxx-image.img-cn-qingdao.aliyuncs.com

CDN加速的域名: image.xxx.com.w.alikunlun.com

两者对比

网页文件和图片文件上传操作没有区别,均可通过公网和内网的地址进行文件上传。

在不使用CDN加速的情况下,若使用OSS地址直接访问,没有任何区别。

在配置CDN后,存在明显的差异:

网页文件需要手动设置CDN加速,访问时,文件类型不受限制。

图片文件自动设置CDN加速,仅有图片文件才能被正常访问。

图片文件配置方式的优势在于,可实现文件的服务端实时处理。

比如:http://image.xxx.com/x.jpg@1e_400w_390h_1c_0i_1o_90Q_1x.jpg,可立即实现文件大小的转换

网页文件配置方式的优势在于,使用CDN加速时,访问时不受文件类型的限制。

监控

安装SDK

下载Python的阿里云OSS的SDK。

http://aliyunecs.oss-cn-hangzhou.aliyuncs.com/OSS_Python_API_20140509.zip

解压缩后安装

python setup.py install

安装完成后,初步调试这个SDK,因为python版本原因,模块引用告警

/usr/lib/python2.6/site-packages/oss-0.1.3-py2.6.egg/oss/oss_util.py:21: DeprecationWarning:the md5 module is deprecated; use hashlib instead import md5

根据提示,将import md5 修改为import hashlib即可

编写监控脚本

脚本逻辑:

a.检查bucket信息是否可以正常获取

b.将本地文件复制一份,修改为随机文件名

c.将文件上传至OSS,通过CDN地址下载,再删除

d.删除文件名为随机的文件

脚本每次执行时,重复上述逻辑

代码如下:

#!/usr/bin/python
#coding=utf-8

import os
import sys
import random
import urllib
import shutil
from oss.oss_api import *


def list_bucket():
#API鉴权
oss = OssAPI("xxx.aliyuncs.com","ID","key")
#获取oss信息
osslist = oss.list_all_my_buckets()
#判断状态
if osslist.status == 200:
return 1
else:
return 0

def upload_image(imagename):
#API鉴权
oss = OssAPI("xxx.aliyuncs.com","ID","key")
#上传图片
res = oss.put_object_from_file("bucket_name",imagename,imagename)
#判断状态
if res.status == 200:
return 1
else:
return 0

def download_image(url):
#检查下载返回码
if urllib.urlopen(url).getcode() == 200:
return 1
else:
return 0

def del_image(imagename):
#API鉴权
oss = OssAPI("xxx.aliyuncs.com","ID","key")
#删除图片
res = oss.delete_object("bucket_name",imagename)
#判断状态
if res.status == 204:
return 1
else:
return 0


if __name__ == '__main__':

try:
if list_bucket() == 0:
#获取bucket列表失败
print 2
sys.exit(0)

newimage = ''.join(random.sample('zyxwvutsrqponmlkjihgfedcba',6)) + '.jpg'
#复制文件,修改文件名
if os.path.exists("image.jpg"):
shutil.copyfile("image.jpg", newimage)
else:
#找不到图片文件
print 3
sys.exit(0)

if upload_image(newimage) and download_image("http://CDN域名/"+newimage) and del_image(newimage):
os.remove(newimage)
print 1
else:
print 4
except Exception,e:
print 9