ExpressファイルアップロードミドルウェアMultier

2507 ワード

前言:
ExpressではHTTPリクエストボディのデータはデフォルトで処理されず、通常リクエストボディ(JSON、バイナリ、文字列)のデータに対してbody-parserミドルウェアを使用できます.一方、ファイルアップロード(multipart/form-dataリクエスト)は、リクエストフローに基づいて処理したり、formidableモジュールやMultierミドルウェアを使用したりすることができます.
Multierミドルウェア:
MultierはExpressの公式リリースで、Nodeに使用されています.jsmultipart/form-data要求データ処理のミドルウェア.
busboyに基づいて構築され、ファイルのアップロードを効率的に処理できますが、multipart/form-data以外のユーザーリクエストは処理されません.
次の操作を行います.
Multierはリクエストボディを解析した後、Requestオブジェクトにbodyオブジェクトとfileまたはfilesオブジェクトを追加します(複数のファイルをアップロードするときにfilesオブジェクトを使用します).ここで、bodyオブジェクトにはコミットされたフォームのテキストフィールド(ある場合)が含まれ、file(またはfiles)オブジェクトにはフォームを介してアップロードされたファイルが含まれます.
方法:
Multierモジュールを参照すると、トップレベルのメソッドが得られます.この方法は工場関数であり,この方法を用いてMultierオブジェクトを作成することができる.オプションオブジェクトを受け入れ、最も基本的なオプションはdestであり、Multierファイルの格納場所を教えます.このオプションを無視すると、ファイルはメモリに保存され、ハードディスク(HDD)には書き込まれません.
Multierは、アップロードファイルを解析した後、次のフィールドを含むオブジェクトとして保存します.
fieldname-フォームでコミットされたファイル名(inputコントロールのnameプロパティ)
originalname-ユーザーデバイス内のファイルの元の名前
encoding-ファイルの符号化タイプ
mimetype-ファイルのMimeタイプ
size-ファイルのサイズ
destination-ファイルの保存ディレクトリ(DiskStorage)
Filename-destinationのファイル名(DiskStorage)
Path-ファイルをアップロードするフルパス(DiskStorage)
buffer-ファイルオブジェクトのBuffer(MemoryStorage)
{ fieldname: 'f1',
  originalname: '   .png',
  encoding: '7bit',
  mimetype: 'image/png',
  destination: './www/upload/',
  filename: 'd52f74d801ddfca60d14e4c2cf5050cc',
  path: 'www/upload/d52f74d801ddfca60d14e4c2cf5050cc',
  size: 123309 }
.any()-すべてのファイルを受信
リクエストのすべてのファイルを受信します.アップロードファイルの配列はreqに保存されます.filesにあります.
Multierオブジェクトの方法については、「https://www.jb51.net/article/95488.htm
コードの例:
const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
const fs=require('fs');
const pathLib=require('path');

var objMulter=multer({dest: './www/upload/'});

var server=express();

server.use(objMulter.any());

server.post('/', function (req, res){
    //    
    //newName = 'www/upload/d52f74d801ddfca60d14e4c2cf5050cc' + '.png'
    var newName=req.files[0].path+pathLib.parse(req.files[0].originalname).ext;
    fs.rename(req.files[0].path, newName, function (err){
        if(err)
            res.send('    ');
        else
            res.send('  ');
    });

    //1.         
    //2.       
});

server.listen(8080);