Loading README.md +38 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,44 @@ Also, you must create an `uploads` table, which will store all the data for uplo You can optionally add the `user` and `password` properties to use a user system. ### Amazon S3 To use [Amazon S3](https://aws.amazon.com/s3/) as a storage system, you must install the `aws-sdk` package via npm: `npm install aws-sdk` Once you've done that, your config section should look like this: ```json { "type": "amazon-s3", "bucket": "your-bucket-name", "region": "us-east-1" } ``` Authentication is handled automatically by the client. Check [Amazon's documentation](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html) for more information. You will need to grant your role these permissions to your bucket: ```json { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::your-bucket-name-goes-here/*" } ] } ``` ## Author John Crepezzi <john.crepezzi@gmail.com> Loading lib/document_stores/amazon-s3.js 0 → 100644 +56 −0 Original line number Diff line number Diff line /*global require,module,process*/ var AWS = require('aws-sdk'); var winston = require('winston'); var AmazonS3DocumentStore = function(options) { this.expire = options.expire; this.bucket = options.bucket; this.client = new AWS.S3({region: options.region}); }; AmazonS3DocumentStore.prototype.get = function(key, callback, skipExpire) { var _this = this; var req = { Bucket: _this.bucket, Key: key }; _this.client.getObject(req, function(err, data) { if(err) { callback(false); } else { callback(data.Body.toString('utf-8')); if (_this.expire && !skipExpire) { winston.warn('amazon s3 store cannot set expirations on keys'); } } }); } AmazonS3DocumentStore.prototype.set = function(key, data, callback, skipExpire) { var _this = this; var req = { Bucket: _this.bucket, Key: key, Body: data, ContentType: 'text/plain' }; _this.client.putObject(req, function(err, data) { if (err) { callback(false); } else { callback(true); if (_this.expire && !skipExpire) { winston.warn('amazon s3 store cannot set expirations on keys'); } } }); } module.exports = AmazonS3DocumentStore; Loading
README.md +38 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,44 @@ Also, you must create an `uploads` table, which will store all the data for uplo You can optionally add the `user` and `password` properties to use a user system. ### Amazon S3 To use [Amazon S3](https://aws.amazon.com/s3/) as a storage system, you must install the `aws-sdk` package via npm: `npm install aws-sdk` Once you've done that, your config section should look like this: ```json { "type": "amazon-s3", "bucket": "your-bucket-name", "region": "us-east-1" } ``` Authentication is handled automatically by the client. Check [Amazon's documentation](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html) for more information. You will need to grant your role these permissions to your bucket: ```json { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::your-bucket-name-goes-here/*" } ] } ``` ## Author John Crepezzi <john.crepezzi@gmail.com> Loading
lib/document_stores/amazon-s3.js 0 → 100644 +56 −0 Original line number Diff line number Diff line /*global require,module,process*/ var AWS = require('aws-sdk'); var winston = require('winston'); var AmazonS3DocumentStore = function(options) { this.expire = options.expire; this.bucket = options.bucket; this.client = new AWS.S3({region: options.region}); }; AmazonS3DocumentStore.prototype.get = function(key, callback, skipExpire) { var _this = this; var req = { Bucket: _this.bucket, Key: key }; _this.client.getObject(req, function(err, data) { if(err) { callback(false); } else { callback(data.Body.toString('utf-8')); if (_this.expire && !skipExpire) { winston.warn('amazon s3 store cannot set expirations on keys'); } } }); } AmazonS3DocumentStore.prototype.set = function(key, data, callback, skipExpire) { var _this = this; var req = { Bucket: _this.bucket, Key: key, Body: data, ContentType: 'text/plain' }; _this.client.putObject(req, function(err, data) { if (err) { callback(false); } else { callback(true); if (_this.expire && !skipExpire) { winston.warn('amazon s3 store cannot set expirations on keys'); } } }); } module.exports = AmazonS3DocumentStore;