diff --git a/config/config.js b/config/config.js index 2880643f..a8241c3c 100644 --- a/config/config.js +++ b/config/config.js @@ -15,6 +15,12 @@ config.development = { bucketName: "", downloadUrl: "" //文件下载域名地址 }, + // conf for s3 + s3: { + bucketName: process.env.BUCKET_NAME, + region: process.env.REGION, + downloadUrl: process.env.DOWNLOAD_URL, + }, //文件存储在本地配置 当storageType为local时需要配置 local: { storageDir: "/Users/tablee/workspaces/storage", diff --git a/core/utils/common.js b/core/utils/common.js index 20e856ca..80350c0b 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -6,6 +6,7 @@ var unzip = require('node-unzip-2'); var config = require('../config'); var _ = require('lodash'); var qiniu = require("qiniu"); +var AWS = require('aws-sdk'); var common = {}; module.exports = common; @@ -112,6 +113,8 @@ common.uptoken = function (bucket, key) { common.uploadFileToStorage = function (key, filePath) { if (_.get(config, 'common.storageType') === 'local') { return common.uploadFileToLocal(key, filePath); + } else if (_.get(config, 'common.storageType') === 's3') { + return common.uploadFileToS3(key, filePath); } return common.uploadFileToQiniu(key, filePath); }; @@ -147,6 +150,8 @@ common.uploadFileToLocal = function (key, filePath) { common.getDownloadUrl = function () { if (_.get(config, 'common.storageType') === 'local') { return _.get(config, 'local.downloadUrl'); + } else if (_.get(config, 'common.storageType') === 's3') { + return _.get(config, 's3.downloadUrl'); } return _.get(config, 'qiniu.downloadUrl'); } @@ -185,6 +190,32 @@ common.uploadFileToQiniu = function (key, filePath) { }); }; +common.uploadFileToS3 = function (key, filePath) { + return ( + new Promise(function(resolve, reject) { + AWS.config.update({ + region: _.get(config, 's3.region') + }); + var s3 = new AWS.S3({ + params: {Bucket: _.get(config, 's3.bucketName')} + }); + fs.readFile(filePath, function(err, data) { + s3.upload({ + Key: key, + Body: data, + ACL:'public-read', + }, function(err, response) { + if(err) { + reject(new Error(JSON.stringify(err))); + } else { + resolve(response.ETag) + } + }) + }); + }) + ); +}; + common.diffCollectionsSync = function (collection1, collection2) { var diffFiles = []; var collection1Only = []; diff --git a/package.json b/package.json index 585e8640..80743cfc 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "coverage": "make coverage" }, "dependencies": { + "aws-sdk": "^2.7.0", "bcrypt": "^0.8.7", "bluebird": "^3.4.1", "body-parser": "^1.15.2",