프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / multer / README.md

이력 | 보기 | 이력해설 | 다운로드 (9.41 KB)

1 39 HKM
# Multer [![Build Status](https://travis-ci.org/expressjs/multer.svg?branch=master)](https://travis-ci.org/expressjs/multer) [![NPM version](https://badge.fury.io/js/multer.svg)](https://badge.fury.io/js/multer) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)
2
3
Multer is a node.js middleware for handling `multipart/form-data`, which is primarily used for uploading files. It is written
4
on top of [busboy](https://github.com/mscdex/busboy) for maximum efficiency.
5
6
**NOTE**: Multer will not process any form which is not multipart (`multipart/form-data`).
7
8
## Translations
9
10
This README is also available in other languages:
11
12
- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (Chinese)
13
14
## Installation
15
16
```sh
17
$ npm install --save multer
18
```
19
20
## Usage
21
22
Multer adds a `body` object and a `file` or `files` object to the `request` object. The `body` object contains the values of the text fields of the form, the `file` or `files` object contains the files uploaded via the form.
23
24
Basic usage example:
25
26
```javascript
27
var express = require('express')
28
var multer  = require('multer')
29
var upload = multer({ dest: 'uploads/' })
30
31
var app = express()
32
33
app.post('/profile', upload.single('avatar'), function (req, res, next) {
34
  // req.file is the `avatar` file
35
  // req.body will hold the text fields, if there were any
36
})
37
38
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
39
  // req.files is array of `photos` files
40
  // req.body will contain the text fields, if there were any
41
})
42
43
var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
44
app.post('/cool-profile', cpUpload, function (req, res, next) {
45
  // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files
46
  //
47
  // e.g.
48
  //  req.files['avatar'][0] -> File
49
  //  req.files['gallery'] -> Array
50
  //
51
  // req.body will contain the text fields, if there were any
52
})
53
```
54
55
In case you need to handle a text-only multipart form, you can use any of the multer methods (`.single()`, `.array()`, `fields()`). Here is an example using `.array()`:
56
57
```javascript
58
var express = require('express')
59
var app = express()
60
var multer  = require('multer')
61
var upload = multer()
62
63
app.post('/profile', upload.array(), function (req, res, next) {
64
  // req.body contains the text fields
65
})
66
```
67
68
## API
69
70
### File information
71
72
Each file contains the following information:
73
74
Key | Description | Note
75
--- | --- | ---
76
`fieldname` | Field name specified in the form |
77
`originalname` | Name of the file on the user's computer |
78
`encoding` | Encoding type of the file |
79
`mimetype` | Mime type of the file |
80
`size` | Size of the file in bytes |
81
`destination` | The folder to which the file has been saved | `DiskStorage`
82
`filename` | The name of the file within the `destination` | `DiskStorage`
83
`path` | The full path to the uploaded file | `DiskStorage`
84
`buffer` | A `Buffer` of the entire file | `MemoryStorage`
85
86
### `multer(opts)`
87
88
Multer accepts an options object, the most basic of which is the `dest`
89
property, which tells Multer where to upload the files. In case you omit the
90
options object, the files will be kept in memory and never written to disk.
91
92
By default, Multer will rename the files so as to avoid naming conflicts. The
93
renaming function can be customized according to your needs.
94
95
The following are the options that can be passed to Multer.
96
97
Key | Description
98
--- | ---
99
`dest` or `storage` | Where to store the files
100
`fileFilter` | Function to control which files are accepted
101
`limits` | Limits of the uploaded data
102
`preservePath` | Keep the full path of files instead of just the base name
103
104
In an average web app, only `dest` might be required, and configured as shown in
105
the following example.
106
107
```javascript
108
var upload = multer({ dest: 'uploads/' })
109
```
110
111
If you want more control over your uploads, you'll want to use the `storage`
112
option instead of `dest`. Multer ships with storage engines `DiskStorage`
113
and `MemoryStorage`; More engines are available from third parties.
114
115
#### `.single(fieldname)`
116
117
Accept a single file with the name `fieldname`. The single file will be stored
118
in `req.file`.
119
120
#### `.array(fieldname[, maxCount])`
121
122
Accept an array of files, all with the name `fieldname`. Optionally error out if
123
more than `maxCount` files are uploaded. The array of files will be stored in
124
`req.files`.
125
126
#### `.fields(fields)`
127
128
Accept a mix of files, specified by `fields`. An object with arrays of files
129
will be stored in `req.files`.
130
131
`fields` should be an array of objects with `name` and optionally a `maxCount`.
132
Example:
133
134
```javascript
135
[
136
  { name: 'avatar', maxCount: 1 },
137
  { name: 'gallery', maxCount: 8 }
138
]
139
```
140
141
#### `.none()`
142
143
Accept only text fields. If any file upload is made, error with code
144
"LIMIT\_UNEXPECTED\_FILE" will be issued. This is the same as doing `upload.fields([])`.
145
146
#### `.any()`
147
148
Accepts all files that comes over the wire. An array of files will be stored in
149
`req.files`.
150
151
**WARNING:** Make sure that you always handle the files that a user uploads.
152
Never add multer as a global middleware since a malicious user could upload
153
files to a route that you didn't anticipate. Only use this function on routes
154
where you are handling the uploaded files.
155
156
### `storage`
157
158
#### `DiskStorage`
159
160
The disk storage engine gives you full control on storing files to disk.
161
162
```javascript
163
var storage = multer.diskStorage({
164
  destination: function (req, file, cb) {
165
    cb(null, '/tmp/my-uploads')
166
  },
167
  filename: function (req, file, cb) {
168
    cb(null, file.fieldname + '-' + Date.now())
169
  }
170
})
171
172
var upload = multer({ storage: storage })
173
```
174
175
There are two options available, `destination` and `filename`. They are both
176
functions that determine where the file should be stored.
177
178
`destination` is used to determine within which folder the uploaded files should
179
be stored. This can also be given as a `string` (e.g. `'/tmp/uploads'`). If no
180
`destination` is given, the operating system's default directory for temporary
181
files is used.
182
183
**Note:** You are responsible for creating the directory when providing
184
`destination` as a function. When passing a string, multer will make sure that
185
the directory is created for you.
186
187
`filename` is used to determine what the file should be named inside the folder.
188
If no `filename` is given, each file will be given a random name that doesn't
189
include any file extension.
190
191
**Note:** Multer will not append any file extension for you, your function
192
should return a filename complete with an file extension.
193
194
Each function gets passed both the request (`req`) and some information about
195
the file (`file`) to aid with the decision.
196
197
Note that `req.body` might not have been fully populated yet. It depends on the
198
order that the client transmits fields and files to the server.
199
200
#### `MemoryStorage`
201
202
The memory storage engine stores the files in memory as `Buffer` objects. It
203
doesn't have any options.
204
205
```javascript
206
var storage = multer.memoryStorage()
207
var upload = multer({ storage: storage })
208
```
209
210
When using memory storage, the file info will contain a field called
211
`buffer` that contains the entire file.
212
213
**WARNING**: Uploading very large files, or relatively small files in large
214
numbers very quickly, can cause your application to run out of memory when
215
memory storage is used.
216
217
### `limits`
218
219
An object specifying the size limits of the following optional properties. Multer passes this object into busboy directly, and the details of the properties can be found on [busboy's page](https://github.com/mscdex/busboy#busboy-methods).
220
221
The following integer values are available:
222
223
Key | Description | Default
224
--- | --- | ---
225
`fieldNameSize` | Max field name size | 100 bytes
226
`fieldSize` | Max field value size | 1MB
227
`fields` | Max number of non-file fields | Infinity
228
`fileSize` | For multipart forms, the max file size (in bytes) | Infinity
229
`files` | For multipart forms, the max number of file fields | Infinity
230
`parts` | For multipart forms, the max number of parts (fields + files) | Infinity
231
`headerPairs` | For multipart forms, the max number of header key=>value pairs to parse | 2000
232
233
Specifying the limits can help protect your site against denial of service (DoS) attacks.
234
235
### `fileFilter`
236
237
Set this to a function to control which files should be uploaded and which
238
should be skipped. The function should look like this:
239
240
```javascript
241
function fileFilter (req, file, cb) {
242
243
  // The function should call `cb` with a boolean
244
  // to indicate if the file should be accepted
245
246
  // To reject this file pass `false`, like so:
247
  cb(null, false)
248
249
  // To accept the file pass `true`, like so:
250
  cb(null, true)
251
252
  // You can always pass an error if something goes wrong:
253
  cb(new Error('I don\'t have a clue!'))
254
255
}
256
```
257
258
## Error handling
259
260
When encountering an error, multer will delegate the error to express. You can
261
display a nice error page using [the standard express way](http://expressjs.com/guide/error-handling.html).
262
263
If you want to catch errors specifically from multer, you can call the
264
middleware function by yourself.
265
266
```javascript
267
var upload = multer().single('avatar')
268
269
app.post('/profile', function (req, res) {
270
  upload(req, res, function (err) {
271
    if (err) {
272
      // An error occurred when uploading
273
      return
274
    }
275
276
    // Everything went fine
277
  })
278
})
279
```
280
281
## Custom storage engine
282
283
For information on how to build your own storage engine, see [Multer Storage Engine](https://github.com/expressjs/multer/blob/master/StorageEngine.md).
284
285
## License
286
287
[MIT](LICENSE)