aliOSS 封装了阿里云 OSS 云储存平台的 SDK,集成了文件上传、断点续传、文件下载、图片处理、新增 Bucket、获取文件列表、复制文件、判断文件存在、获取文件元信息、创建文件夹、文件重命名等功能;使用之前须开通阿里云 OSS 服务,智能媒体管理,文档预览/图片识别等需开通智能媒体管理(IMM),获取 accessKeyId 和 accessKeySecret。如有任何 Bug 、建议或使用方面的问题,欢迎邮我 jarviszheng(at)qq.com 。 使用示例 Demo 帖
初始化 调用其它接口之前必须先初始化,支持明文模式
、自签名模式
、STS鉴权模式
,明文模式鉴权必须设置 accessKeyId 和 accessKeySecret,此方式建议只在本地测试时使用,正式环境请使用自签名模式或 STS 鉴权模式。
自签名和 STS 鉴权模式阿里云设置步骤:
登录阿里云服务器管理控制台,开通访问控制 RAM
自签名:用户管理新建用户,并授权 AliyunOSSFullAccess 权限, 记录 AccessKey 和 secret
STS 鉴权:在自签名基础上,用户管理授权 AliyunSTSAssumeRoleAccess 权限,角色管理新建角色 ,授权 AliyunOSSFullAccess 权限
授权示例代码
init({params},callback(ret, err))
accessKeyId:
accessKeySecret:
endpoint:
https://oss-cn-beijing.aliyuncs.com
bucketName:
params:
headers:
timeout:
socketTimeout:
concurrent:
retry:
signUrl:
OSS LTAIkdm8dtCB1v0c:rGBQZQC2C+elImt+7sja+nh9rZg=
stsUrl:
{
"StatusCode": 200,
"AccessKeyId":"STS.iA645eTOXEqP3cg3VeHf",
"AccessKeySecret":"rV3VQrpFQ4BsyHSAvi5NVLpPIVffDJv4LojUBZCf",
"Expiration":"2015-11-03T09:52:59Z",
"SecurityToken":"CAES7QIIARKAAZPlqaN9ILiQZPS+JDk..."
}
STS 鉴权详情请参考:https://help.aliyun.com/document_detail/32046.html
ret:
{
msg: "初始化成功!";
}
err:
{
msg: "缺少必要参数!"; // 错误描述
}
明文模式:
var aliOSS = api.require("aliOSS");
aliOSS.init(
{
endpoint: "https://oss-cn-beijing.aliyuncs.com",
accessKeyId: "YOUR ACCESS KEY ID",
accessKeySecret: "YOUR ACCESS KEY SECRET",
bucketName: "YOUR BUCKET NAME",
},
function (ret, err) {
api.alert({msg: JSON.stringify(ret)});
api.alert({msg: JSON.stringify(err)});
}
);
自签名模式:
aliOSS.init(
{
endpoint: "https://oss-cn-beijing.aliyuncs.com",
signUrl: "http://localhost/aliOSS/sign.php",
bucketName: "YOUR BUCKET NAME",
},
function (ret, err) {
api.alert({msg: JSON.stringify(ret)});
api.alert({msg: JSON.stringify(err)});
}
);
自签名 sign.php 只需要返回签名字符串即可,具体加密方式参见 阿里云文档签名算法.
PHP 代码(其它语言同理,只需要返回【"OSS " + AccessKeyId + ":" + 加密字符串
】该字符串即可):
$AccessKeyId="YOUR ACCESS KEY ID";
$AccessKeySecret="YOUR ACCESS KEY SECRET";
// content 参数由插件自动拼装发送(POST)给服务端,服务端只需按名称(content)获取该值参与加密即可。
$content=$_REQUEST['content'];
// 将获取的 content 以 AccessKeySecret作为加密KEY, 先经过hmac-sha1加密再 base64 编码后获取签名
$sign=base64_encode(hash_hmac('sha1',$content,$AccessKeySecret,true));
echo "OSS " . $AccessKeyId . ":" . $sign; // 按阿里云规则返回签名字符串
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
文件上传
upload({params}, callback(ret, err))
file:
name:
bucketName:
verify:
ret:
上传中返回上传进度
{
oper: "progress", //字符串
progress:"0.05%" //字符串
}
上传成功返回
{
oper: "complete", //字符串
requestId:"requestId", //字符串 具体含义参考阿里云
ETag:"etag"
}
更新说明:为了统一,原 1.X 版本返回值 etag 已废弃,如果您使用过旧版本的 etag,请修改为新的 ETag。
err:
{
code: 404, //错误码,数字类型;
msg:"错误信息描述"
}
var aliOSS = api.require("aliOSS");
aliOSS.upload(
{
file: "fs://a.jpg",
name: "abc.jpg",
},
function (ret, err) {
if (ret.oper == "progress") {
progress1 = $api.byId("progress1");
if (progress1) {
$api.html(progress1, ret.progress);
} else {
$api.append(document.body, '<div id="progress1">Progress</div>
');
}
} else if (ret.oper == "complete") {
api.alert({msg: JSON.stringify(ret)});
}
if (err) {
alert(err.msg);
}
}
);
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
断点续传
resumableUpload({params}, callback(ret, err))
file:
name:
bucketName:
verify:
ret:
上传中返回上传进度
{
oper: "progress", //字符串
progress:"0.05%" //字符串
}
上传成功返回
{
oper: "complete", //字符串
requestId:"requestId" //字符串
}
err:
{
code: 404, //错误码,数字类型;
msg:"错误信息描述"
}
var aliOSS = api.require("aliOSS");
aliOSS.resumableUpload(
{
file: "fs://a.jpg",
name: "a.jpg",
verify: "CRC",
},
function (ret, err) {
if (ret.oper == "progress") {
progress1 = $api.byId("progress1");
if (progress1) {
$api.html(progress1, ret.progress);
} else {
$api.append(document.body, '<div id="progress1">Progress</div>
');
}
} else if (ret.oper == "complete") {
api.alert({msg: JSON.stringify(ret)});
}
if (err) {
alert(err.msg);
}
}
);
api.getPicture(
{
sourceType: "album",
mediaValue: "pic",
},
function (ret, err) {
if (ret && ret.data != "") {
alioss.upload(
{
file: ret.data, // getPicture返回的图片路径
name: "upload.jpg", // 上传至OSS的保存路径
},
function (ret2, err2) {
// alert("ret:"+JSON.stringify(ret2));
if (ret2.oper == "progress") {
$apiutil.css(progress, "width: " + ret2.progress);
} else if (ret2.oper == "complete") {
alert(JSON.stringify(ret2));
}
if (err2) {
alert(err2.msg);
}
}
);
}
}
);
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
下载文件,当下载图片并且传入 process 参数时可以处理图片。
getObject({params}, callback(ret, err))
objectKey:
saveAs:
process:
bucketName:
verify:
ret:
下载中返回下载进度
{
oper: "progress", //字符串
progress: "0.05%" //字符串
}
下载成功返回
{
oper: "complete", //字符串类型
path: "/sdcard/0/a.txt", //文件保存路径
contentLength:456789, // 数字 ,文件字节数
contentType:"image/jpg",
ETag:"fba9dede5f27731c9771645a39863328",
lastModified:"2017/03/08 20:20:20"
}
err:
{
code: 500, //错误码,数字类型
msg:"错误描述"
}
var aliOSS = api.require("aliOSS");
aliOSS.getObject(
{
objectKey: "5/68/10.mp4",
saveAs: "fs://g.mp4",
},
function (ret, err) {
if (ret.oper == "progress") {
progress1 = $api.byId("progress1");
if (progress1) {
$api.html(progress1, ret.progress);
} else {
$api.append(document.body, '<div id="progress1">Progress</div>
');
}
} else if (ret.oper == "complete") {
api.alert({msg: JSON.stringify(ret)});
}
if (err) {
alert(err.msg);
}
}
);
图片处理
var aliOSS = api.require("aliOSS");
aliOSS.getObject(
{
objectKey: "abc.jpg",
saveAs: "fs://d.jpg",
process: "image/resize,m_fixed,w_100,h_100",
},
function (ret, err) {
if (ret.oper == "progress") {
progress1 = $api.byId("progress1");
if (progress1) {
$api.html(progress1, ret.progress);
} else {
$api.append(document.body, '<div id="progress1">Progress</div>
');
}
} else if (ret.oper == "complete") {
api.alert({msg: JSON.stringify(ret)});
}
if (err) {
alert(err.msg);
}
}
);
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
获取文件元信息
getHead({params}, callback(ret, err))
objectKey:
bucketName:
ret:
{
oper: "success", //字符串
contentLength:456789, // 数字 ,文件字节数
contentType:"image/jpg",
ETag:"fba9dede5f27731c9771645a39863328",
lastModified:"2017/03/08 20:20:20"
}
err:
{
code: 500, //错误码,数字类型;
msg:"错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.getHead(
{
objectKey: "10.mp4",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret));
alert("err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 1.0.0 及更高版本
判断文件是否存在于 OSS 服务器
exist({params}, callback(ret, err))
objectKey:
bucketName:
ret:
{
oper: "success", //字符串
exist: true // Boolean 存在为true 不存在为false
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.exist(
{
objectKey: "10.mp4",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret));
alert("err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 2.0.0 及更高版本
删除 OSS 服务器中的文件,要求对 Bucket 有写权限。注:删除时并不会对文件存在与否进行检测,即文件不存在于 OSS 服务器中也会返回成功。
delete({params}, callback(ret, err))
objectKey:
bucketName:
ret:
{
oper: "success", //字符串
deleted: true // Boolean 成功为true 不成功为false
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.delete(
{
objectKey: "10.mp4",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret));
alert("err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 2.0.0 及更高版本
获取 OSS 服务器中的文件列表。
listObjects({params}, callback(ret, err))
prefix:
maxKeys:
marker:
current:
key
, isDir
属性。bucketName:
ret:
{
oper: "success", //字符串
// 返回的文件列表 JSON 数组
objects: [{
key: 'pic/', //文件名 包含前辍的完整路径
isDir: true, // 是不是文件夹
size: 99, // 文件大小
status: 'Normal' , // 文件状态
ETag:"fba9dede5f27731c9771645a39863328",
lastModified:"2018/03/08 20:20:20" // 最后修改时间
}],
length:1, // 数字 当前返回结果中包含的文件数量
marker:'pic/', // 字符串, 下次查询偏移位置,使用该值设置下次查询的marker参数,可实现分页。
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.listObjects(
{
prefix: "pic/",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret));
alert("err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 2.0.0 及更高版本
复制 OSS 服务器内文件。不能复制超过 1G 的文件,不能在不同数据中心间复制。
copy({params}, callback(ret, err))
bucketName:
objectKey:
toBucketName:
toObjectKey:
ret:
{
oper: "success", //字符串
result: true //Boolean
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.copy(
{
toBucketName: "wiz-alioss1",
objectKey: "pic.jpg",
toObjectKey: "copied.jpg",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret));
alert("err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 2.0.0 及更高版本
新建 Bucket,需要相应权限。
copy({params}, callback(ret, err))
bucketName:
ret:
{
oper: "success", //字符串
result: true //Boolean
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require('aliOSS');
aliOSS.createBucket({
bucketName:"wiz-alioss1"
}, function(ret, err)
alert("ret:"+JSON.stringify(ret))
alert("err:"+JSON.stringify(err))
})
iOS 系统,Android 系统
可提供的 2.0.0 及更高版
文档预览,支持 ppt、xls、doc、pdf 等格式文档进行在线预览,具体配置及开通请参考阿里云智能媒体管理(IMM)
previewDoc({params}, callback(ret, err))
bucketName:
objectKey:
expired:
copy:
ret:
{
url: "https://www.."; // 预览文件的URL地址,可嵌入iframe进行预览
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.previewDoc(
{
objectKey: "测试.docx",
copy: 1,
},
function (ret2, err2) {
if (ret2) {
alert(ret2.url);
}
if (err2) {
alert(err2.msg);
}
}
);
iOS 系统,Android 系统
可提供的 2.1.0 及更高版
人脸识别,具体配置及开通请参考阿里云智能媒体管理(IMM)
detectFace({params}, callback(ret, err))
bucketName:
objectKey:
ret:
{
oper:"complete",
result: {
"Faces":[
{
"Age":29,
"Attractive":0.95,
"Emotion":"HAPPY",
"EmotionConfidence":0.9875330924987793,
"EmotionDetails":{
"ANGRY":0.000016857109585544094,
"CALM":0.012278525158762932,
"DISGUSTED":0.000012325451280048583,
"HAPPY":0.9875330924987793,
"SAD":0.0000388074986403808,
"SCARED":0.000006888585176056949,
"SURPRISED":0.000054363932576961815
},
"FaceAttributes":{
"Beard":"NONE",
"BeardConfidence":1,
"FaceBoundary":{
"Height":928,
"Left":607,
"Top":628,
"Width":894
},
"Glasses":"NONE",
"GlassesConfidence":1,
"Mask":"NONE",
"MaskConfidence":0.9999999403953552,
"Race":"YELLOW",
"RaceConfidence":0.598323404788971
},
"FaceConfidence":0.9704222083091736,
"FaceId":"4199e1985b6d3bb075f0994c82e6d2fd82a274c11ce183e1fdb222dd3aa8c7ce",
"Gender":"MALE",
"GenderConfidence":1,
}
],
"ImageUri":"oss://image-demo/person.jpg",
"RequestId":"5C3D854A3243A93A275E9C99",
"httpStatusCode":200,
"success":true
} // 识别出的人脸信息,具体参考阿里云文档说明
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require('aliOSS');
aliOSS.detectFace({
objectKey: "lili.jpg",
}, function(ret2, err2) {
if (ret2) {
alert(ret2.result);
}
if (err2) {
alert(err2.msg);
}
});
})
iOS 系统,Android 系统
可提供的 2.1.0 及更高版
图片内容识别、打标,识别图片中的元素,可识别图片中的场景、食物、交通工具等,具体参考,具体配置及开通请参考阿里云智能媒体管理(IMM)
tagImage({params}, callback(ret, err))
bucketName:
objectKey:
ret:
{
oper:"complete",
result: {
"Tags": [
{
"TagConfidence": 0.9864643812179565,
"TagLevel": 1,
"TagName": "动物"
},
{
"TagConfidence": 0.9864643812179565,
"TagLevel": 2,
"ParentTagName": "动物",
"TagName": "宠物"
},
{
"TagConfidence": 0.9864643812179565,
"TagLevel": 3,
"ParentTagName": "宠物",
"TagName": "猫"
},
{
"TagConfidence": 0.5677459836006165,
"TagLevel": 4,
"ParentTagName": "猫",
"TagName": "狸花猫"
}
],
"RequestId": "BB73FB6F-B482-46A8-BD30-76F861F20423",
"ImageUri": "oss://imm-test/testcases/cat.jpg"
}
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.tagImage(
{
objectKey: "food.jpg",
},
function (ret2, err2) {
if (ret2) {
alert(ret2.result);
}
if (err2) {
alert(err2.msg);
}
}
);
iOS 系统,Android 系统
可提供的 2.1.0 及更高版
授权第三方访问,可授权第三方访问文件。
url({params}, callback(ret, err))
bucketName:
objectKey:
expired:
process:
ret:
{
url: "https://www....";
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.url(
{
objectKey: "food.jpg",
process: "image/resize,w_200",
},
function (ret2, err2) {
if (ret2) {
alert(ret2.url);
}
if (err2) {
alert(err2.msg);
}
}
);
iOS 系统,Android 系统
可提供的 2.1.2 及更高版
文件重命名。
rename({params}, callback(ret, err))
bucketName:
name:
newName:
ret:
{
oper: "success", //字符串
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.rename(
{
bucketName: "bucket",
name: "pic/a.jpg",
newName: "pic/b.jpg",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret) + " err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 2.1.5 及更高版
创建文件夹。
createFolder({params}, callback(ret, err))
bucketName:
name:
ret:
{
oper: "success", //字符串
}
err:
{
code: 500, //错误码,数字类型;
msg: "错误描述 "
}
var aliOSS = api.require("aliOSS");
aliOSS.createFolder(
{
bucketName: "bucket",
name: "newfolder",
},
function (ret, err) {
alert("ret:" + JSON.stringify(ret) + " err:" + JSON.stringify(err));
}
);
iOS 系统,Android 系统
可提供的 2.1.5 及更高版