nodejsのexpress(4.x)_node.jsをベースにしたファイルアップロード機能の実装

WBOY
リリース: 2016-05-16 15:30:39
オリジナル
1489 人が閲覧しました

Nodejs は、活力と無限の情熱に満ちた若いプログラミング フレームワークであり、常に急速に更新されています。 Nodejs をベースにした公式 Web 開発ライブラリである Express も同時に開発されており、毎年メジャー バージョン アップグレードが行われ、フレームワークの最下層では大規模な改修も行われています。 Express4 では、ミドルウェア ライブラリ接続が複数のよりきめの細かいライブラリに置き換えられました。明らかな利点は、これらのミドルウェアがより自由に更新およびリリースでき、Express リリース サイクルの影響を受けないことですが、問題はまた、以前のバージョンとの互換性がないため、コードを変更することを意味します。

一定期間の調査と探索の結果、アップロードを実現する方法は次のとおりであることがわかりました。 1. Express ミドルウェア multer モジュール (これは最も効率的で、express3.x でネイティブにサポートされ、express4.x では独​​立したモジュールになりました) )、2. connect-multiparty モジュール (ただし、現在は公式には推奨されていません)、3. multiparty モジュールを使用して実装します (この方法がより一般的です)、4. 強力なプラグインを使用して実装します (プラグインはシンプルでわかりやすい)

最も簡単な方法は、「c​​onnect-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 関連の知識を学ぶのに役立つことを願っています。

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