この記事では、node.js が multer ミドルウェアを使用してポスト ファイル アップロードの問題を解決する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
関連する推奨事項: 「nodejs チュートリアル 」
body-parser ミドルウェアは実際には「非常に不完全」であり、処理できるのは「単純なデータ」。
ご存知のとおり、post は次の 2 つの目的でよく使用されます:
データ送信 (投稿フォーム送信)
ファイルのアップロード
しかし、「有名な」ボディパーサーは最初のことしか実行できません。
不快...
この恐るべきモジュールは、以前に書いた画像ファイルのアップロード記事で使用されており、その核心は次のとおりです。
var form=new formidable.IncomingForm();
次の form .uploadDir
、フィールド/エンドモニタリング... はすべてこれに基づいています。
さて、ここでお話したいのは欠点です。body-parser と同様に、この強力なプラグインは画像形式の処理にしか使用できません。これも非常に残念です。
そこで、作者は「分断された山河を救える」と考えて、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('f1'));
フロントエンド コードは次のとおりです - ファイル送信、指定された形式は 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('http'); var fs = require('fs'); var path = require('path'); var server = http.createServer(function (req, res) { var method = req.method; // 获取请求方法 if (method === 'POST') { // 暂只关注 post 请求 var dataStr = ''; req.on('data', function (chunk) { // 接收到数据,先存储起来 var chunkStr = chunk.toString() dataStr += chunkStr }); req.on('end', function () { // 接收数据完成,将数据写入文件 var fileName = path.resolve(__dirname, 'post.txt'); fs.writeFile(fileName, dataStr) res.end('OK'); }); } }); server.listen(8081);
プログラミング関連の知識については、プログラミング学習をご覧ください。 !
以上がnode.js は multer ミドルウェアを使用してファイルをアップロードしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。