2017-03-31 159 views
0

我創建了下面的aws lambda函數,併爲我的目標存儲桶上的所有S3上傳事件設置觸發器。該函數嘗試拒絕大於2000000字節的文件上載。錯誤消息已記錄,但context.fail('上傳被拒絕')或context.fail(新錯誤('上傳被拒絕'))均未阻止失敗上傳。如何拒絕文件上傳,或者一般情況下,拒絕/停止aws lambda的事件?aws lambda拒絕文件上傳

//// AWS的NodeJS代碼拉姆達://///

exports.handler = (event, context, callback) => { 
    var MAX_FILE_SIZE = 2000000; 
    var msg = ''; 
    console.log('Received event:', JSON.stringify(event, null, 2)); 
    if (event.Records && event.Records.length && event.Records.length>0 && event.Records[0].s3 && event.Records[0].s3.object 
     && event.Records[0].s3.object.size && event.Records[0].s3.object.size > MAX_FILE_SIZE) { 
     msg = 'File ' + event.Records[0].s3.object.key + ' rejected, file size ' + event.Records[0].s3.object.size 
      + ' is greater than ' + MAX_FILE_SIZE + ' bytes.'; 
     console.log(msg); 
     var err = new Error(msg); 
     callback(err, {'disposition':'STOP_RULE'}); 
     context.fail(err); 
    } else { 
     msg = 'Upload succeeded.'; 
     console.log(msg); 
     callback(null, msg); 
     context.succeed(msg); 
    } 

}; 
+0

回答是,但它更多的是一個評論:你的lambda函數或你的回調函數需要實際上做的上傳,以防止它。而不是讓你的lambda函數在上傳時觸發,也就是在它已經發生之後,你應該在api網關上使用它並調用它,然後如果它通過了你的驗證,或者發回你的服務器去做上傳,或者讓lambda上傳本身(我建議) –

+0

如果你的目標是限制上傳到S3的大小,那麼你可以使用桶政策來做到這一點。請參閱https://aws.amazon.com/articles/1434。 –

回答

1

你不能這樣做,如果你的拉姆達由S3通知引發的,僅僅是因爲在這種情況下,它不控制文件以任何方式上傳。它被簡單地稱爲基於文件上傳進行一些處理。如果你想控制文件上傳,那麼你的上傳應該通過lambda功能發生

你目前的情況實際上可以做的是,如果你看到文件大小超過了你所需的限制,你可以刪除文件,但你不能阻止文件上傳