root / HServer / 00.Server / 00.Program / node_modules / multer / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.48 KB)
1 | 39 | HKM | 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 |