base-repository
Version:
[](https://travis-ci.org/joehua87/base-repository)
127 lines (88 loc) • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = upload;
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _coFsExtra = require('co-fs-extra');
var _coFsExtra2 = _interopRequireDefault(_coFsExtra);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _coBusboy = require('co-busboy');
var _coBusboy2 = _interopRequireDefault(_coBusboy);
var _thunkifyWrap = require('thunkify-wrap');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _marked = [upload].map(regeneratorRuntime.mark);
var debug = require('debug')('base-repository:controller:upload');
function upload(next) {
var parts, part, promises, folder, file, stream;
return regeneratorRuntime.wrap(function upload$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(this.method !== 'POST')) {
_context.next = 4;
break;
}
_context.next = 3;
return next;
case 3:
return _context.abrupt('return', _context.sent);
case 4:
// multipart upload
parts = (0, _coBusboy2.default)(this);
part = undefined;
this.files = [];
promises = [];
folder = _path2.default.join(_os2.default.tmpdir(), Math.random().toString());
_context.next = 11;
return _coFsExtra2.default.mkdirp(folder);
case 11:
this.fields = [];
case 12:
_context.next = 14;
return parts;
case 14:
if (!(part = _context.sent)) {
_context.next = 26;
break;
}
if (part.filename) {
_context.next = 18;
break;
}
// If part is not file, it's a field, so store it into this.fields to consume later
this.fields[part[0]] = part[1];
return _context.abrupt('continue', 12);
case 18:
file = _path2.default.join(folder, part.filename);
this.files.push(file);
debug('Got file', file);
stream = _fs2.default.createWriteStream(file);
promises.push((0, _thunkifyWrap.event)(stream, 'end'));
part.pipe(stream);
_context.next = 12;
break;
case 26:
debug('Got field', this.fields);
_context.next = 29;
return Promise.all(promises);
case 29:
debug('Upload successfully');
_context.next = 32;
return next;
case 32:
_context.next = 34;
return _coFsExtra2.default.remove(folder);
case 34:
delete this.files;
case 35:
case 'end':
return _context.stop();
}
}
}, _marked[0], this);
}