Javascript aws lambda拒绝文件上载

Javascript aws lambda拒绝文件上载,javascript,node.js,amazon-web-services,amazon-s3,lambda,Javascript,Node.js,Amazon Web Services,Amazon S3,Lambda,我创建了下面的aws lambda函数,并在目标存储桶上的所有S3上载事件上设置触发器。函数尝试拒绝大于2000000字节的文件上载。已记录错误消息,但context.fail“upload rejected”或context.failnew错误“upload rejected”均未阻止上载失败。如何拒绝文件上传,或通常拒绝/停止aws lambda事件 ////nodejs aws lambda代码:///// exports.handler = (event, context, callba

我创建了下面的aws lambda函数,并在目标存储桶上的所有S3上载事件上设置触发器。函数尝试拒绝大于2000000字节的文件上载。已记录错误消息,但context.fail“upload rejected”或context.failnew错误“upload rejected”均未阻止上载失败。如何拒绝文件上传,或通常拒绝/停止aws lambda事件

////nodejs aws lambda代码://///

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);
    }

};

如果lambda是由s3通知触发的,则不能这样做,因为在这种情况下,它不会以任何方式控制文件上载。它被简单地调用以基于文件上传进行一些处理。如果要控制文件上载,则应通过lambda函数进行上载


在您当前的情况下,您实际上可以做的是,如果您看到文件的大小大于所需的限制,您可以删除该文件,但您不能阻止该文件获得上载

Was答案,但它更多的是一个注释:您的lambda函数或回调函数,需要实际进行上传才能阻止它。与其让lambda函数在上传时触发,也就是在它已经发生之后,您应该将它与api网关一起使用并调用它,然后如果它通过了验证,就打开它,或者发送回您的服务器进行上传,或者让lambda自己进行上传,如果您的目标是限制上传到s3的大小,我建议您这样做,然后您可以使用bucket策略来实现这一点。看见