ホームページ > ウェブフロントエンド > jsチュートリアル > node.js は multer ミドルウェアを使用してファイルをアップロードします

node.js は multer ミドルウェアを使用してファイルをアップロードします

青灯夜游
リリース: 2021-03-04 10:36:16
転載
1853 人が閲覧しました

この記事では、node.js が multer ミドルウェアを使用してポスト ファイル アップロードの問題を解決する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

node.js は multer ミドルウェアを使用してファイルをアップロードします

関連する推奨事項: 「nodejs チュートリアル

body-parser ミドルウェアは実際には「非常に不完全」であり、処理できるのは「単純なデータ」。
ご存知のとおり、post は次の 2 つの目的でよく使用されます:

  • データ送信 (投稿フォーム送信)

  • ファイルのアップロード

しかし、「有名な」ボディパーサーは最初のことしか実行できません。

不快...

この恐るべきモジュールは、以前に書いた画像ファイルのアップロード記事で使用されており、その核心は次のとおりです。

var form=new formidable.IncomingForm();
ログイン後にコピー

次の form .uploadDirフィールド/エンドモニタリング... はすべてこれに基づいています。

さて、ここでお話したいのは欠点です。body-parser と同様に、この強力なプラグインは画像形式の処理にしか使用できません。これも非常に残念です。


そこで、作者は「分断された山河を救える」と考えて、multerミドルウェアを見つけました(笑)

multerの応用例の一つミドルウェア :ファイル アップロード

(c)npm install express multer
ログイン後にコピー
const express = require('express');
const bodyparser = require('body-parser');//解析post数据
const multer = require('multer'); //解析Post文件
const fs = require('fs');
const pathlib = require('path'); //解析文件路径
 
var server = express();
 
var objMulter = multer({dest:'./www/upload'}); //用户上传文件存入dest目录下
server.use(objMulter.any()); //处理任何用户上传的文件
 
//处理post文件数据
server.post('/',function(req,res){
	console.log(req.files[0].originalname); //req.files post文件 originalname为文件名
 
	//获取原始拓展名+后缀名
	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('上传成功');
		}
	});
});
server.listen(8081);
ログイン後にコピー

ここでは、req.body の代わりに req.files が使用されます。本文には (テキスト) 数値のみを保存できるため、ここで body-parser を使用すると、 console. 表示されるファイル名。

コード内の objMulter.any() の機能は「すべてのデータを取得する」ことです。
any( の反対の single( もあります) ) )、これにはパラメータ (フロントエンド <input>! の名前) を指定する必要があります。たとえば、この例では、次のように記述することもできます:

server.use(objMulter.single(&#39;f1&#39;));
ログイン後にコピー

フロントエンド コードは次のとおりです - ファイル送信、指定された形式は multipart/form-data です:

<form action="http://localhost:8081/" method="post" enctype="multipart/form-data">
	文件:<input type="file" name="f1" /><br />
	<input type="submit" value="上传" />
</form>
ログイン後にコピー

実際には、fs モジュールの rename (元のパス、新しいパス、コールバック) メソッドを使用して、ファイルの保存パスを強制的に変更することで「ファイルをアップロードする」という目的を達成します。


今日の拡張:
パス モジュールの replace メソッドは、ノードで「ファイルを指定する」ためによく使用されます (16/17 行目に注意してください):

var http = require(&#39;http&#39;);
var fs = require(&#39;fs&#39;);
var path = require(&#39;path&#39;);

var server = http.createServer(function (req, res) {
    var method = req.method; // 获取请求方法
    if (method === &#39;POST&#39;) { // 暂只关注 post 请求
        var dataStr = &#39;&#39;;
        req.on(&#39;data&#39;, function (chunk) {
            // 接收到数据,先存储起来
            var chunkStr = chunk.toString()
            dataStr += chunkStr
        });
        req.on(&#39;end&#39;, function () {
            // 接收数据完成,将数据写入文件
            var fileName = path.resolve(__dirname, &#39;post.txt&#39;);
            fs.writeFile(fileName, dataStr)
            res.end(&#39;OK&#39;);
        });
    }
});
server.listen(8081);
ログイン後にコピー

プログラミング関連の知識については、プログラミング学習をご覧ください。 !

以上がnode.js は multer ミドルウェアを使用してファイルをアップロードしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート