阅读286 返回首页    go 阿里云 go 技术社区[云栖]


函数计算触发OSS来处理图片加水印和大小裁剪

1、 需要搭建Web应用服务器(不管有没有图片处理,空置率会比较高)

2、 需要编写相关OSS代码来处理这块事情(需要专门维护一套运行处理代码)

3、 需要考虑图片处理的及时性如何保障(要考虑并发和定时器的执行方法)


 整体架构图

 老的框架:

8a303725f815bcef127f3bdb0232ef4dd22620e8

1、 对图片的处理需要编写相关代码

2、 OSS上把转码后的图片转移到新的Bucket,需要维护相关代码

3、 需要考虑图片处理的及时性

新框架:

用户仅仅需要在Function Compute(函数计算)上设置触发器+函数,例如,监控某个Bucket下的PutObject的事件,当用户把图片上传到OSS的某个Bucket,马上触发后续的函数代码,函数代码的无非就是把图片进行处理,并把图片转移到新的bucket中,整个过程,不需要搭建Web服务器,不需要写触发条件,也无需关注整个服务状态如何。纯粹的事件触发后续程序,详见下图分解,仅仅一处蓝色圆圈就是需要编写的代码。

164b7985865db26a20d85d0c004c75866350a3f5

整个业务处理流程

72d23ff8ee6ed914554ba6a37007c36fe0c5a948

 源码实例

1、 开通service

0917e729329b708f285c68d4fad5c7433566464e


这个示例中选在线编辑,输入编写代码即可。

470532ee4550ed156f124e3ce6b6f74f418ab56a




'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

ce49ef0cb4bbbf92d00cf258fb6eeae496297a74


710ab5bbeabda6cd4b94e85444f639752dffe169



最后更新:2017-06-14 17:31:42

  上一篇:go  一个合格的H5响应式网站需要具备哪些功能
  下一篇:go  对于程序员,理财不只是节流,你还可以花样赚外快