With this middleware you can:
- check authorization of a user to access a target object(using ACL, RBAC, etc.)
- translate urls to S3 keys
This middleware supports:
- Caching objects
- Piping objects from S3 to response, so objects don't fully loaded in memory
npm install s3layer
Usage example:
varapp=require("express")(),S3Layer=require("s3layer");AWS_SETUP={accessKeyId: "...",secretAccessKey: "...",bucket: "..."// default bucket};// create a middlewarevars3l=S3Layer({AWS: AWS_SETUP,// the default bucket, can be overwritten by a getS3Key's returned valuebucket: AWS_SETUP.bucket,/** * params has fields: * req - http request * res - http response * url - requested url */getS3Key: function(params,cb){params.url=params.url.replace(/^\//,"");if(params.url=="restricted-file.png"){params.res.status(403).send("Forbidden");return;}// proxy request to Key = params.urlcb(null,params.url);}});// use the middleware in the express applicationapp.use("/files",s3l);Accepts a request params and a callback function, in the callback function you can return:
string- interpreted as S3 Keyobjectwhich can containkeyandbucketfields
For example:
getS3Key: function(params,cb){params.url=params.url.replace(/^\//,"");if(params.url=="restricted-file.png"){params.res.status(403).send("Forbidden");return;}// proxy request to Key = params.urlcb(null,{key: params.url,bucket: "another-bucket"});}You can modify headers returned for a file, with modifyHeaders callback:
For example
/** * @param {Object} params * @return {Object} params.headers - headers returned by Amazon S3 * @return {Object} params.outHeaders - headers that will be returned in a HTTP response, you can modify them directly */
modifyHeaders: function(params){if(params.headers["content-type"]&¶ms.headers["content-type"].indexOf("image/")===0){// force download all imagesparams.outHeaders["Content-Disposition"]='attachment; filename="img.jpg"';}}modifyHeaders is synchronous!