Multerはノードです。主にファイルのアップロードに使用されるmultipart/form-data
を処理するためのjsミドルウェア。 それは最高の効率のためのbusboyの上に書かれています。
注:Multerはmultipart(multipart/form-data
)ではないフォームを処理しません。
インストール
npm install --save multer
使用法
Multerはbody
オブジェクトとfile
またはfiles
オブジェクトをrequest
オブジェクトに追加します。 body
オブジェクトにはフォームのテキストフィールドの値が含まれ、file
またはfiles
オブジェクトにはフォームを介してアップロードされたファイルが含まれます。
基本的な使用例:
const multer = require('multer')const express = require('express')const app = express()const upload = multer()app.post('/profile', upload.single('avatar'), (req, res, next) => { // req.file is the `avatar` file // req.body will hold the text fields, if there were any})app.post('/photos/upload', upload.array('photos', 12), (req, res, next) => { // req.files is array of `photos` files // req.body will contain the text fields, if there were any})const cpUpload = upload.fields()app.post('/cool-profile', cpUpload, (req, res, next) => { // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files // // e.g. // req.files -> File // req.files -> Array // // req.body will contain the text fields, if there were any})
テキストのみのマルチパートフォームを処理する必要がある場合は、.none()
メソッドの例を使用できます:
const multer = require('multer')const express = require('express')const app = express()const upload = multer()app.post('/profile', upload.none(), (req, res, next) => { // req.body contains the text fields})
API
ファイル情報
各ファイルには以下の情報が含まれています:
キー | 説明 |
---|---|
fieldName |
フォームで指定されたフィールド名 |
originalName |
ユーザーのコンピューター上のファイルの名前(クライアントによってファイル名が指定されていない場合はundefined ) |
size |
バイト単位のファイルのサイズ |
stream |
ファイルの流れ |
detectedMimeType |
検出されたmime-type、または検出に失敗した場合はnull |
detectedFileExtension |
ファイルの一般的なファイル拡張子 検出に失敗した場合は空の文字列(先頭に. を付けて一致させますpath.extname ) |
clientReportedMimeType |
クライアントがContent-Type ヘッダーを使用して報告したmimeタイプ、またはヘッダーが存在しない場合はnull1 |
clientReportedFileExtension |
アップロードされたファイルの拡張子(によって報告されたpath.extname ) |
1 現在、ヘッダーが存在しない場合はtext/plain
を返しますが、これはバグであり、パッチリリースで修正されます。 この動作に依存しないでください。
multer(opts)
Multerはoptionsオブジェクトを受け入れますが、Multerに渡すことができるオプションは次のとおりです。
キー | 説明 |
---|---|
limits |
アップロードされたデータの制限(詳細な説明) |
.single(fieldname)
fieldname
という名前の単一のファイルを受け入れます。 単一のファイルはreq.file
に格納されます。
.array(fieldname)
すべてfieldname
という名前のファイルの配列を受け入れます。 maxCount
以上のファイルがアップロードされている場合は、必要に応じてエラー出力します。 ファイルの配列はreq.files
に格納されます。
.fields(fields)
fields
で指定されたファイルの組み合わせを受け入れます。 ファイルの配列を持つオブジェクトはreq.files
に格納されます。
fields
は、name
および必要に応じてmaxCount
を持つオブジェクトの配列である必要があります。例:
.none()
テキストフィールドのみを受け入れます。 ファイルのアップロードが行われた場合、”LIMIT_UNEXPECTED_FILE”というコードのエラーが発行されます。 これはupload.fields()
を実行するのと同じです。
.any()
ワイヤー上に来るすべてのファイルを受け入れます。 ファイルの配列はreq.files
に格納されます。
警告: ユーザーがアップロードするファイルを常に処理するようにしてください。悪意のあるユーザーが予期していなかったルートにファイルをアップロードする可能性があるため、multerをグローバルミドルウェアとして追加しないでください。 この関数は、アップロードされたファイルを処理しているルートでのみ使用してくださ
limits
以下のオプションのプロパティのサイズ制限を指定するオブジェクト。 Multerはこのオブジェクトをbusboyに直接渡し、プロパティの詳細はbusboyのページで見つけることができます。
以下の制限があります:
キー | 説明 | デフォルト |
---|---|---|
fieldNameSize |
最大フィールド名サイズ | '100B' |
fieldSize |
最大フィールド値サイズ | '8KB' |
fields |
ファイル以外のフィールドの最大数 | 1000 |
fileSize |
最大ファイルサイズ | '8MB' |
files |
ファイルフィールドの最大数 | 10 |
headerPairs |
ヘッダーの最大数 key=>解析する値のペア | 2000 (ノードのhttpと同じ) |
バイト数の制限は、数値または適切な接頭辞を持つ文字列として渡すことができます。
制限を指定すると、サービス拒否(DoS)攻撃からサイトを保護するのに役立ちます。
エラー処理
エラーが発生した場合、multerはエラーをexpressに委任します。 標準の高速方法を使用して素敵なエラーページを表示することができます。
特にmulterからエラーをキャッチしたい場合は、自分でthemiddleware関数を呼び出すことができます。
const upload = multer().single('avatar')app.post('/profile', (req, res) => { upload(req, res, (err) => { if (err) { // An error occurred when uploading return } // Everything went fine })})