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 })})

コメントを残す

メールアドレスが公開されることはありません。