Nodejs は、活力と無限の情熱に満ちた若いプログラミング フレームワークであり、常に急速に更新されています。 Nodejs をベースにした公式 Web 開発ライブラリである Express も同時に開発されており、毎年メジャー バージョン アップグレードが行われ、フレームワークの最下層では大規模な改修も行われています。 Express4 では、ミドルウェア ライブラリ接続が複数のよりきめの細かいライブラリに置き換えられました。明らかな利点は、これらのミドルウェアがより自由に更新およびリリースでき、Express リリース サイクルの影響を受けないことですが、問題はまた、以前のバージョンとの互換性がないため、コードを変更することを意味します。
一定期間の調査と探索の結果、アップロードを実現する方法は次のとおりであることがわかりました。 1. Express ミドルウェア multer モジュール (これは最も効率的で、express3.x でネイティブにサポートされ、express4.x では独立したモジュールになりました) )、2. connect-multiparty モジュール (ただし、現在は公式には推奨されていません)、3. multiparty モジュールを使用して実装します (この方法がより一般的です)、4. 強力なプラグインを使用して実装します (プラグインはシンプルでわかりやすい)
最も簡単な方法は、「connect-multiparty」ミドルウェアを介してアップロードすることです。
プロジェクトに npm install connect-multiparty を実行してインストールします。
使用法:
var multipart = require('connect-multiparty'); var multipartMiddleware = multipart(); app.post('/upload', multipartMiddleware, function(req, resp) { console.log(req.body, req.files); // don't forget to delete all req.files when done });
アップロード後、アップロードされたファイルは一時ディレクトリに一時ファイルを生成します。req.files を印刷して特定のファイル パスを表示できます。
コメントされた場所にある一時ファイルを実際のディレクトリに移動して名前を変更するだけで、アップロード機能が完了します。
シンプル。
正式アドレス: https://www.npmjs.com/package/connect-multiparty
ただし、公式はこのミドルウェアの使用を推奨していません。エラー処理が面倒なため、「multiparty」を直接使用することをお勧めします。
「multiparty」を使用してバージョンを実装してみましょう。
1. Express (バージョン 4.11.x) を使用して、デフォルトの Jade をテンプレート エンジンとして使用してプロジェクトを作成します。
2. プロジェクト ディレクトリに、npm install multiparty を使用して必要なコンポーネントをインストールします。
3. views/index.jadeを変更し、以下のようにファイルアップロード用の簡単なフォームを作成します。
extends layout block content form(method='post', action='/file/uploading', enctype='multipart/form-data') input(name='inputFile', type='file', multiple='mutiple') input(name='btnUp', type='submit',value='上传')
4. ページのアップロードと応答のアップロードのためのバックグラウンド コードを実装するために、routes/index.js を変更します。
var express = require('express'); var router = express.Router(); var multiparty = require('multiparty'); var util = require('util'); var fs = require('fs'); /* 上传页面 */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); /* 上传*/ router.post('/file/uploading', function(req, res, next){ //生成multiparty对象,并配置上传目标路径 var form = new multiparty.Form({uploadDir: './public/files/'}); //上传完成后处理 form.parse(req, function(err, fields, files) { var filesTmp = JSON.stringify(files,null,); if(err){ console.log('parse error: ' + err); } else { console.log('parse files: ' + filesTmp); var inputFile = files.inputFile[]; var uploadedPath = inputFile.path; var dstPath = './public/files/' + inputFile.originalFilename; //重命名为真实文件名 fs.rename(uploadedPath, dstPath, function(err) { if(err){ console.log('rename error: ' + err); } else { console.log('rename ok'); } }); } res.writeHead(, {'content-type': 'text/plain;charset=utf-'}); res.write('received upload:\n\n'); res.end(util.inspect({fields: fields, files: filesTmp})); }); }); module.exports = router;
完了。これで、nodejs Express (4.x) をベースにしたファイルアップロード機能の紹介が完了しました。皆さんが、nodejs Express 関連の知識を学ぶのに役立つことを願っています。