函數計算觸發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