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)
リクエストのすべてのファイルを受信します.アップロードファイルの配列はreqに保存されます.filesにあります.
Multierオブジェクトの方法については、「https://www.jb51.net/article/95488.htm
コードの例:
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);