函数计算触发OSS来处理图片加水印和大小裁剪
1ã 需要搭建Web应用服务器(不管有没有图片处理,空置率会比较高)
2ã 需要编写相关OSS代码来处理这块事情(需要专门维护一套运行处理代码)
3ã 需要考虑图片处理的及时性如何保障(要考虑并发和定时器的执行方法)
整体架构图
老的框架:
1ã 对图片的处理需要编写相关代码
2ã 在OSS上把转码后的图片转移到新的Bucket,需要维护相关代码
3ã 需要考虑图片处理的及时性
新框架:
用户仅仅需要在Function Compute(函数计算)上设置触发器+函数,例如,监控某个Bucket下的PutObject的事件,当用户把图片上传到OSS的某个Bucket,马上触发后续的函数代码,函数代码的无非就是把图片进行处理,并把图片转移到新的bucket中,整个过程,不需要搭建Web服务器,不需要写触发条件,也无需关注整个服务状态如何。纯粹的事件触发后续程序,详见下图分解,仅仅一处蓝色圆圈就是需要编写的代码。
整个业务处理流程:
源码实例
1、 开通service
这个示例中选在线编辑,输入编写代码即可。
'use strict';
module.exports.handler = function(event, context, callback) {
var co = require('co'); //设置初始的OSS环境变量
var OSS = require('ali-oss');
var client = new OSS({
region: 'oss-cn-shanghai',
accessKeyId: ‘your accessKeyId’, //输入你的accessKeyId
accessKeySecret:’ your accessKey Secret’, //输入你的accessKeySecret
bucket: 'function-demo-bucket' //输入华东2区的bucket name
});
//读取bucket下的目录
co(function* () {
var result = yield client.list({
prefix: 'tmp/'
});
var name ;
var nameArray = result.objects;
for(var index=0; index < nameArray.length; index++){
var str = nameArray[index].name;
//resize
if (str.indexOf('.jpg') > 0){
console.log(str);
//把处理后的图片存放到临时/tmp目录下(tmp目录能存放的256MB文件)
var resize = yield client.get(str,'/tmp/example-resize.jpg',{process: 'image/resize,m_fixed,w_128,h_128'});
//把新处理后的图片转移到新目录下
//put new dir
name = new Date().getTime()+'.jpg';
var put = yield client.put('resource/'+ name,'/tmp/example-resize.jpg',{
meta: {
year: 2017,
people: 'wenyi'
}
});
callback(null, "New Name is : "+name);
console.log(name);
//删除掉被处理完成的图片
//delete old pic
var del = yield client.delete(str);
console.log(del);
}
}
}).catch(function(err){
console.log(err)
});
callback(null, "Invk OSS is OK!");
};
3、设置OSS 的Trigger
最后更新:2017-06-14 17:31:42