閱讀286 返回首頁    go 小米 go 小米6


函數計算觸發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  對於程序員,理財不隻是節流,你還可以花樣賺外快