s3-uploading
Version:
The small lib which allows to upload directory to AWS S3.
123 lines (99 loc) • 3.79 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _chalk = _interopRequireDefault(require("chalk"));
var _awsSdk = require("aws-sdk");
var _mime = _interopRequireDefault(require("mime"));
var _recursiveReaddir = _interopRequireDefault(require("recursive-readdir"));
var _helpers = require("./helpers");
var _actions = require("./actions");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var Uploader =
/*#__PURE__*/
function () {
function Uploader(options) {
_classCallCheck(this, Uploader);
if ((0, _helpers.isNone)(options) || (0, _helpers.isNone)(options.s3) || (0, _helpers.isNone)(options.upload)) {
throw new Error(error('Missing config!'));
}
var s3 = options.s3,
upload = options.upload;
this.count = 0;
this.s3Options = s3;
this.uploadOptions = upload;
this.s3 = new _awsSdk.S3(this.s3Options);
}
_createClass(Uploader, [{
key: "getDirPath",
value: function getDirPath(filePath) {
var directory = this.uploadOptions.directory;
var filePartials = filePath.replace(directory, '').split('/');
return filePartials.filter(function (item) {
return !(0, _helpers.isNone)(item);
});
}
}, {
key: "getListUploadFiles",
value: function getListUploadFiles(files) {
var _this = this;
var bucket = this.uploadOptions.bucket;
var ACL = this.s3Options.ACL;
return files.map(function (file) {
var key = _this.getDirPath(file).join('/');
var fileStream = _fs.default.createReadStream(file);
fileStream.on('error', function (err) {
(0, _actions.handleUploadError)("File error: ".concat(err));
});
return (0, _helpers.getUploadObject)({
Bucket: bucket,
Key: key,
Body: fileStream,
ContentType: _mime.default.getType(file),
ACL: ACL
});
});
}
}, {
key: "handleUpload",
value: function handleUpload(files) {
var _this2 = this;
var count = this.count;
var uploadFiles = this.getListUploadFiles(files);
uploadFiles.forEach(function (item) {
_this2.s3.upload(item, function (err, data) {
if (err) {
(0, _actions.handleUploadError)(err);
}
if (data) {
count++;
(0, _actions.handleUploadSuccessfully)({
data: data,
fileLength: files.length,
count: count
});
}
});
});
}
}, {
key: "upload",
value: function upload() {
var _this3 = this;
var directory = this.uploadOptions.directory;
(0, _recursiveReaddir.default)(directory).then(function (files) {
_this3.handleUpload(files);
}).catch(function (err) {
console.error(_chalk.default.bold.red(err));
});
}
}]);
return Uploader;
}();
var _default = Uploader;
exports.default = _default;
;