Spaces:
Runtime error
Runtime error
var makeMiddleware = require('./lib/make-middleware') | |
var diskStorage = require('./storage/disk') | |
var memoryStorage = require('./storage/memory') | |
var MulterError = require('./lib/multer-error') | |
function allowAll (req, file, cb) { | |
cb(null, true) | |
} | |
function Multer (options) { | |
if (options.storage) { | |
this.storage = options.storage | |
} else if (options.dest) { | |
this.storage = diskStorage({ destination: options.dest }) | |
} else { | |
this.storage = memoryStorage() | |
} | |
this.limits = options.limits | |
this.preservePath = options.preservePath | |
this.fileFilter = options.fileFilter || allowAll | |
} | |
Multer.prototype._makeMiddleware = function (fields, fileStrategy) { | |
function setup () { | |
var fileFilter = this.fileFilter | |
var filesLeft = Object.create(null) | |
fields.forEach(function (field) { | |
if (typeof field.maxCount === 'number') { | |
filesLeft[field.name] = field.maxCount | |
} else { | |
filesLeft[field.name] = Infinity | |
} | |
}) | |
function wrappedFileFilter (req, file, cb) { | |
if ((filesLeft[file.fieldname] || 0) <= 0) { | |
return cb(new MulterError('LIMIT_UNEXPECTED_FILE', file.fieldname)) | |
} | |
filesLeft[file.fieldname] -= 1 | |
fileFilter(req, file, cb) | |
} | |
return { | |
limits: this.limits, | |
preservePath: this.preservePath, | |
storage: this.storage, | |
fileFilter: wrappedFileFilter, | |
fileStrategy: fileStrategy | |
} | |
} | |
return makeMiddleware(setup.bind(this)) | |
} | |
Multer.prototype.single = function (name) { | |
return this._makeMiddleware([{ name: name, maxCount: 1 }], 'VALUE') | |
} | |
Multer.prototype.array = function (name, maxCount) { | |
return this._makeMiddleware([{ name: name, maxCount: maxCount }], 'ARRAY') | |
} | |
Multer.prototype.fields = function (fields) { | |
return this._makeMiddleware(fields, 'OBJECT') | |
} | |
Multer.prototype.none = function () { | |
return this._makeMiddleware([], 'NONE') | |
} | |
Multer.prototype.any = function () { | |
function setup () { | |
return { | |
limits: this.limits, | |
preservePath: this.preservePath, | |
storage: this.storage, | |
fileFilter: this.fileFilter, | |
fileStrategy: 'ARRAY' | |
} | |
} | |
return makeMiddleware(setup.bind(this)) | |
} | |
function multer (options) { | |
if (options === undefined) { | |
return new Multer({}) | |
} | |
if (typeof options === 'object' && options !== null) { | |
return new Multer(options) | |
} | |
throw new TypeError('Expected object for argument options') | |
} | |
module.exports = multer | |
module.exports.diskStorage = diskStorage | |
module.exports.memoryStorage = memoryStorage | |
module.exports.MulterError = MulterError | |