ipfs storage for images and other nontext items. for use with etica - runs on etica network and currencys
https://collect.etica-stats.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.5 KiB
104 lines
2.5 KiB
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
|
|
|