|
分享UIMediaScanner、imageFilter.compress和uploadFile完成的多图批量...
[复制链接]
其实思路非常简单:用UIMediaScanner选择多图---->前端展示---->调**.**press压缩---->uploadFile上传---->回调id放到业务表中。
耗费了我很大精力的地方是在循环多图,压缩上传时,由于压缩是异步函数,传的参数上传时都变成循环最后一个值了。考虑过压缩成功后组成数组,再循环上传,实践部可行。
现在终于是实现了,也不知道算不算递归,就是在上传的回调函数里调用回调函数。
分享出来也希望帮到跟我有一样困惑的朋友,或者是你有更好的方法,大家交流下。
下面直接上代码。
var album = api.require('UIMediaScanner');
album.open({
column : 4,
sort : {
key : 'time',
order : 'desc'
},
texts : {
stateText : '*',
cancelText : '取消',
finishText : '完成'
},
styles : {
bg : '#fff',
}
}, function(ret) {
if (ret) {
list = ret.list;
uploadImage(list.length);
}
});
function uploadImage(length) {
//压缩图片
if ( length == 0) {
return;
}
var item = list[length-1];
var imgPath = item.path;
var img_Name = new Date().getTime() + "_" + length;
var imageCachePath = api.cacheDir;
var imageFilter = api.require("imageFilter");
**.**press({
img : imgPath,
quality : 0.5,
scale : 0.5,
save : {
album : true,
imgPath : imageCachePath,
imgName : img_Name + '.jpg'
}
}, function(reta, err) {
if (reta.status) {
var compressedImgPath = imageCachePath + '/' + img_Name + '.jpg';
//上传图片
var model = api.require('model');
model.config({
appId : 'A657',
appKey : 'F0A794'
});
model.uploadFile({
report : true,
data : {
file : {
name : img_Name,
url : compressedImgPath
},
}
}, function(retb, err) {
if (retb) {
var state = retb.state;
if (state == 1) {
var body = retb.body;
if (body) {
$api.text($api.byId('' + imgPath + ''), '上传完成');
$api.attr($api.byId('' + imgPath + ''), 'data-id', '' + body.id + '');
}
uploadImage(length-1);
}
} else {
alert(JSON.stringify(err));
}
});
}
});
}
|
|