nodejsの中の中間部品--Muler


中間部品Multier
Mullterはnodejsでmultiad/form-dataデータフォーマットを処理します.(主にアップロード機能で使用される)のミドルウェアです.このミドルウェアはmultiiPad/form-dataデータフォーマット以外のいかなる形式のデータTipsを処理しません.multiad/form-dataはデータを転送する特殊なタイプを指定するために使われています.主に私達がアップロードした非テキストの内容です.写真やmp 3など*インストール方法です.
$ npm install --save multer
  • API
  • ファイル情報(file information)アップロード後のファイルは以下の属性fieldnameを持っています.アップロードしたファイルのラベルはフォーム内のname origginame:ファイルはユーザのコンピュータ上のファイル名Enccodingです.このファイルのコードmimetype:このファイルのMime type size:このファイルのバイト数destination:このファイルが保存するフォルダfilename:保存しているフォルダの下のファイル名path:ファイル上のファイル名転送後に保存されるフルパスのブザー:フルファイルのブザー
    multier(opts)multierは、一般的にはdest属性であり、アップロードファイルの保存位置を規定しているオプションのパラメータを入力できます.このパラメータが省略されている場合、アップロードされたファイルはメモリに保存されています.ディスクには書き込みません.デフォルトではMulerはファイル名の衝突を避けるためにアップロードされたファイル名を変更します.名前を変更する方法は、必要に応じて個別に作成できます.
    以下の属性はMulterのオプションパラメータdest or storgeです.アップロードされたファイルが格納されている位置filefilter:どのファイルをフィルタしてアップロードできるか方法limits:アップロードファイルのサイズを制限します.
    一般的なソフトウェア開発では、destのみ設定が必要です.設定方法は以下の通りです.
    var upload = multer({ dest: 'uploads/' })
    
    アップロードしたいファイルに対してもっと要求があれば、storgeパラメータを使ってもいいです.
    var  multer=require('multer');
    var storage = multer.diskStorage({
    
     //         
        destination: function (req, file, cb) {
            cb(null, './public/uploads')
       }, 
     //        ,       
      filename: function (req, file, cb) {
          var fileFormat = (file.originalname).split(".");
          cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]);
      }
     });  
     //       multer  。
     var upload = multer({
          storage: storage
    });
    
    .single(fieldname)この方法は、個々のアップロードされたファイルfieldnameを受信し、アップロードされたファイルのためのタグname属性です.アップロードされたファイル情報は、req.fileに格納されます.
    .array(fieldname[,maxCount])この方法は複数のファイルを受信できます.パラメータはすべてのアップロードファイルに使用されるタグのname属性です.ファイルの数がmaxCountに規定された最大数を超えるとエラーが発生します.アップロードされたファイルはreq.filesに保存されます.
    fields(fields)
    この方法は、fieldsによって指定された異なる種類のファイルを受信することができます.複数のファイルオブジェクトは、req.filesに保存されます.fieldsは、nameとmaxCount属性からなるjsonオブジェクト配列です.
    [
      { name: 'avatar', maxCount: 1 },
      { name: 'gallery', maxCount: 8 }
    ]
    
    .any()
    リード線からのファイルの受信を許可します.ファイルはreq.filesに保存されます.
    storge
    Disk Strage:disk storge engineは、ファイルをディスクに格納する操作を制御できます.
    var storage = multer.diskStorage({
      destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
      },
      filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
    }
    })
    
    var upload = multer({ storage: storage })
    
    2つのオプションパラメータがあります.destinationとfilename.これは2つの規定のファイルがどのように保存されるかの方法です.destinationはアップロードされたファイルが保存されているフォルダを指定します.このパラメータは文字列でも与えられます.
    filenameはファイルをそれぞれのフォルダに保存したファイル名を規定します.filenameが指定されていない場合、アップロードされたファイルはランダムにファイル名を割り当てますが、拡張子がありません.Mulerは自動的にファイルに拡張子を追加しません.すべてのfilenameメソッドはファイル拡張子を含む完全なファイル名を返す必要があります.
    メモリ内のファイルをBufferオブジェクトとして記憶します.
    var storage = multer.memoryStorage()
    var upload = multer({ storage: storage })
    
    memorystorgeを使用すると、ファイル情報は、完全なファイルを保存しています.一度または短時間で非常に大きなファイルをアップロードしたり、非常に多くのファイルをアップロードしたりすると、アプリケーションがメモリいっぱいになる可能性があります.
    limitは以下のオプションパラメータでアップロードファイルのサイズ制限を定義します.
    キーワード
    説明
    デフォルト
    field NameSize
    field nameの最大バイト値
    100 bytes
    fieldSize
    fieldの最大バイト値
    1 MB
    fields
    ファイル以外のfieldsの最大数
    Infinity
    fileSize For multiiPad forms
    ファイルの最大バイト
    Infinity
    files For multiiPad forms
    file fieldsの最大数量
    Infinity
    parts For multiiPad forms
    (fields+files)の最大数
    Infinity
    fileFilterはどのファイルをアップロードできますか?どのファイルをスキップしますか?
    function fileFilter (req, file, cb) {
    
      // The function should call `cb` with a boolean
      // to indicate if the file should be accepted
    
      // To reject this file pass `false`, like so:
      cb(null, false)
    
      // To accept the file pass `true`, like so:
      cb(null, true)
    
      // You can always pass an error if something goes wrong:
      cb(new Error('I don\'t have a clue!'))
    
    }
    
    Error handlingはエラー情報を取得する必要があれば、中間部品関数で取得できます.
    app.post('/profile', function (req, res) {
      upload(req, res, function (err) {
        if (err) {
          // An error occurred when uploading
          return
        }
    
        // Everything went fine
      })
    })
    
  • 基本的な使い方
    var express = require('express');
    var multer  = require('multer');
    var upload = multer({ dest: 'uploads/' });//            
    var app = express();
    app.post('/profile', upload.single('avatar'), function (req, res, next) {
    
    // req.body will hold the text fields, if there were any
    })
    
    app.post('/photos/upload', upload.array('photos', 12),      function (req, res, next) {
    
     // req.body will contain the text fields, if there were any
    })
    
      var cpUpload = upload.fields([{ name: 'avatar',     maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
     app.post('/cool-profile', cpUpload, function (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['avatar'][0] -> File
    //  req.files['gallery'] -> Array
    //
    // req.body will contain the text fields, if there were any
    })
    
  • 参考文献:Muler