root / HServer / 00.Server / 00.Program / node_modules / multer / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.48 KB)
1 |
var makeError = require('./lib/make-error') |
---|---|
2 |
var makeMiddleware = require('./lib/make-middleware') |
3 |
|
4 |
var diskStorage = require('./storage/disk') |
5 |
var memoryStorage = require('./storage/memory') |
6 |
|
7 |
function allowAll (req, file, cb) { |
8 |
cb(null, true) |
9 |
} |
10 |
|
11 |
function Multer (options) { |
12 |
if (options.storage) {
|
13 |
this.storage = options.storage
|
14 |
} else if (options.dest) { |
15 |
this.storage = diskStorage({ destination: options.dest }) |
16 |
} else {
|
17 |
this.storage = memoryStorage()
|
18 |
} |
19 |
|
20 |
this.limits = options.limits
|
21 |
this.preservePath = options.preservePath
|
22 |
this.fileFilter = options.fileFilter || allowAll
|
23 |
} |
24 |
|
25 |
Multer.prototype._makeMiddleware = function (fields, fileStrategy) { |
26 |
function setup () { |
27 |
var fileFilter = this.fileFilter |
28 |
var filesLeft = Object.create(null) |
29 |
|
30 |
fields.forEach(function (field) {
|
31 |
if (typeof field.maxCount === 'number') { |
32 |
filesLeft[field.name] = field.maxCount |
33 |
} else {
|
34 |
filesLeft[field.name] = Infinity
|
35 |
} |
36 |
}) |
37 |
|
38 |
function wrappedFileFilter (req, file, cb) { |
39 |
if ((filesLeft[file.fieldname] || 0) <= 0) { |
40 |
return cb(makeError('LIMIT_UNEXPECTED_FILE', file.fieldname)) |
41 |
} |
42 |
|
43 |
filesLeft[file.fieldname] -= 1
|
44 |
fileFilter(req, file, cb) |
45 |
} |
46 |
|
47 |
return {
|
48 |
limits: this.limits, |
49 |
preservePath: this.preservePath, |
50 |
storage: this.storage, |
51 |
fileFilter: wrappedFileFilter,
|
52 |
fileStrategy: fileStrategy
|
53 |
} |
54 |
} |
55 |
|
56 |
return makeMiddleware(setup.bind(this)) |
57 |
} |
58 |
|
59 |
Multer.prototype.single = function (name) { |
60 |
return this._makeMiddleware([{ name: name, maxCount: 1 }], 'VALUE') |
61 |
} |
62 |
|
63 |
Multer.prototype.array = function (name, maxCount) { |
64 |
return this._makeMiddleware([{ name: name, maxCount: maxCount }], 'ARRAY') |
65 |
} |
66 |
|
67 |
Multer.prototype.fields = function (fields) { |
68 |
return this._makeMiddleware(fields, 'OBJECT') |
69 |
} |
70 |
|
71 |
Multer.prototype.none = function () { |
72 |
return this._makeMiddleware([], 'NONE') |
73 |
} |
74 |
|
75 |
Multer.prototype.any = function () { |
76 |
function setup () { |
77 |
return {
|
78 |
limits: this.limits, |
79 |
preservePath: this.preservePath, |
80 |
storage: this.storage, |
81 |
fileFilter: this.fileFilter, |
82 |
fileStrategy: 'ARRAY' |
83 |
} |
84 |
} |
85 |
|
86 |
return makeMiddleware(setup.bind(this)) |
87 |
} |
88 |
|
89 |
function multer (options) { |
90 |
if (options === undefined) { |
91 |
return new Multer({}) |
92 |
} |
93 |
|
94 |
if (typeof options === 'object' && options !== null) { |
95 |
return new Multer(options) |
96 |
} |
97 |
|
98 |
throw new TypeError('Expected object for argument options') |
99 |
} |
100 |
|
101 |
module.exports = multer |
102 |
module.exports.diskStorage = diskStorage |
103 |
module.exports.memoryStorage = memoryStorage |