UPYUN iOS SDK 集成了表单上传UpYunFormUploader 和分块上传 UpYunBlockUpLoader 两部分,分别实现了以下文档接口:
1.又拍云存储 FORM API 表单上传接口(http://docs.upyun.com/api/form_api/) 2.又拍云存储 REST API 断点续传接口(http://docs.upyun.com/api/rest_api/#_3)
表单上传 适用于上传图片、短视频等小文件。(另外通过 otherParameters 可实现方便的图片视频预处理功能) 分块上传 适用于大文件上传和断点续传。(特别地,断点续传上传的图片不支持预处理)
iOS 8.0 及以上版本, ARC 模式, 基于系统网络库 NSURLSession 发送 HTTP 请求。
upYun原生插件封装了UPYUNSDK,支持表单上传和分块上传。表单上传支持本地签名和服务器端签名上传,还支持表单上传加异步多媒体处理--视频截图,详情参考 http://docs.upyun.com/api/form_api/#_2
本地签名的表单上传
localUploader({params}, callback(ret, err))
bucketName:
operator:
password:
file:
saveKey:
ret:
上传中返回上传进度
{
progress_rate:"89.9 %" //上传进度,字符串
}
上传完成后
{
responseBody:{ // 字典类型
code: 200,
message:'ok', //上传成功
mimetype:'video/mp4' //文件类型
url: 'ios_sdk_new/video.mp4', //文件地址
time: 1499310282, //时间
file_size: 4521321 //文件大小
}
}
err:
{
code: 404, //数字类型;错误码
msg:"错误信息描述" //字符串类型;
}
var upYun = api.require('upYun');
upYun.localUploader({
bucketName:'test86400',
operator:'operator123',
password:'password123',
file:'fs://video.mp4',
saveKey:'ios_sdk_new/video.mp4',
},function(ret, err) {
if(ret){
api.alert({
msg: JSON.stringify(ret)
})
}
else{
api.alert({
msg: JSON.stringify(err)
})
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
服务器端签名的表单上传
为了保证服务的安全性,使用服务的表单 API 密钥(可登录又拍云控制台查看)对 policy 进行签名,签名的结果即是 signature。
signature 生成步骤:
1.生成 policy 字符串(见 policy 算法 http://docs.upyun.com/api/authorization/#policy);
2.将第 1 步中的字符串与表单 API 密钥字符串用 & 拼接;
3.将第 2 步中的字符串计算 md5,所得即为 signature。
例如,假设服务的表单 API 验证密钥为:cAnyet74l9hdUag34h2dZu8z7gU=
第一步,生成 policy 字符串:
eyJidWNrZXQiOiJkZW1vYnVja2V0IiwiZXhwaXJhdGlvbiI6MTQwOTIwMDc1OCwic2F2ZS1rZXkiOiIvaW1nLmpwZyJ9
第二步,第一步的字符串与表单 API 密钥字符串用 & 拼接:
eyJidWNrZXQiOiJkZW1vYnVja2V0IiwiZXhwaXJhdGlvbiI6MTQwOTIwMDc1OCwic2F2ZS1rZXkiOiIvaW1nLmpwZyJ9&cAnyet74l9hdUag34h2dZu8z7gU=
第三步,将第二步的字符串计算 md5 后即得到 signature:
646a6a629c344ce0e6a10cadd49756d4
serverUploader({params}, callback(ret, err))
operator:
policy:
signature:
file:
ret:
上传中返回上传进度
{
progress_rate:"89.9 %" //上传进度,字符串
}
上传完成后
{
responseBody:{ // 字典类型
code: 200,
message:'ok', //上传成功
mimetype:'video/mp4' //文件类型
url: 'ios_sdk_new/video.mp4', //文件地址
time: 1499310282, //时间
file_size: 4521321 //文件大小
}
}
err:
{
code: 404, //数字类型;错误码
msg:"错误信息描述" //字符串类型;
}
var upYun = api.require('upYun');
upYun.serverUploader({
operator:'one',
policy: 'eyJleHBpcmF0aW9uIjoxNDg5Mzc4NjExLCJyZXR1cm4tdXJsIjoiaHR0cGJpbi5vcmdcL3Bvc3QiLCJidWNrZXQiOiJmb3JtdGVzdCIsInNhdmUta2V5IjoiXC91cGxvYWRzXC97eWVhcn17bW9ufXtkYXl9XC97cmFuZG9tMzJ9ey5zdWZmaXh9In0=',
signature:'BIC22iXgu5fBUXgoMGGpdWNpsak=',
file:'fs://picture.jpg',
},function(ret, err) {
if(ret){
api.alert({
msg: JSON.stringify(ret)
})
}
else{
api.alert({
msg: JSON.stringify(err)
})
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
iOS系统,Android系统
可提供的1.0.0及更高版本
分块上传
分块上传接口只有一个,需要__本地签名__进行上传
blockUpLoader({params}, callback(ret, err))
bucketName:
operator:
operatorPassword:
filePath:
savePath:
ret:
上传中返回上传进度
{
progress_rate:"89.9 %" //上传进度,字符串
}
上传完成后
{
msg:'上传成功'
}
err:
{
code: 404, //数字类型;错误码
msg:"错误信息描述" //字符串类型;
}
var upYun = api.require('upYun');
upYun.blockUpLoader({
bucketName:'test86400',
operatorPassword:'operator123',
password:'password123',
filePath:'fs://video.mp4',
savePath:'iossdk/blockupload/yyyyyyyyyyyyyyyyy.mp4',
},function(ret, err) {
if(ret){
api.alert({
msg: JSON.stringify(ret)
})
}
else{
api.alert({
msg: JSON.stringify(err)
})
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
表单上传加异步多媒体处理--视频截图 uploaderAndAsyncTask({params}, callback(ret, err))
bucketName:
operator:
password:
file:
saveKey:
otherParameters:
ret:
上传中返回上传进度
{
progress_rate:"89.9 %" //上传进度,字符串
}
上传完成后
{
responseBody:{ // 字典类型
code: 200,
message:'ok', //上传成功
mimetype:'video/mp4' //文件类型
url: 'ios_sdk_new/video.mp4', //文件地址
time: 1499310282, //时间
file_size: 4521321 //文件大小
}
}
err:
{
code: 404, //数字类型;错误码
msg:"错误信息描述" //字符串类型;
}
var upYun = api.require('upYun');
upYun.uploaderAndAsyncTask({
bucketName:'test86400',
operator:'operator123',
password:'password123',
file:'fs://video.mp4',
saveKey:'ios_sdk_new/video.mp4',
otherParameters: {name: 'naga',
type: 'thumbnail',
save_as: 'ios_sdk_new/test2/video.jpg',
avopts: '/o/true/n/1/',
notify_url: 'http://124.160.114.202:18989/echo'},
},function(ret, err) {
if(ret){
api.alert({
msg: JSON.stringify(ret)
})
}
else{
api.alert({
msg: JSON.stringify(err)
})
}
});
iOS系统
可提供的1.0.0及更高版本