首頁 >web前端 >js教程 >基於nodejs express(4.x )實作檔案上傳功能_node.js

基於nodejs express(4.x )實作檔案上傳功能_node.js

WBOY
WBOY原創
2016-05-16 15:30:391507瀏覽

Nodejs是一個年輕的程式框架,充滿了活力和無限激情,一直都在保持快速更新。基於Nodejs的官方Web開發庫Express也在同步發展著,每年升級一個大版本,甚至對框架底層都做了大手術。在Express4時,替換掉中件間庫connect,而改用多個更細粒度的庫來取代。帶來的好處是明顯地,這些中間件能更自由的更新和發布,不會受到Express發布週期的影響;但問題也是很的棘手,不相容於之前的版本,升級就意味著要修改程式碼。

透過一段時間的查閱資料、摸索,我發現實現上傳的方式有:1.express中間件multer模組(此效率最高,在express3.x原生支持,到了express4.x獨立成一個模組了), 2.connect-multiparty模組(但現在官方不推薦),3.使用multiparty模組實現(此方法比較普遍),4.使用formidable插件實現(插件呢,就是簡單易懂);

最簡單的做法是透過「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,如下做一個簡單的用於文件上傳的form。

 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相關知識有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn