基于nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能
Nodejs是一個年輕的編程框架,充滿了活力和無限激情,一直都在保持著快速更新?;贜odejs的官方Web開發(fā)庫Express也在同步發(fā)展著,每年升級一個大版本,甚至對框架底層都做了大手術(shù)。在Express4時,替換掉中件間庫connect,而改用多個更細(xì)粒度的庫來取代。帶來的好處是明顯地,這些中間件能更自由的更新和發(fā)布,不會受到Express發(fā)布周期的影響;但問題也是很的棘手,不兼容于之前的版本,升級就意味著要修改代碼。
通過一段時間的查閱資料、摸索,我發(fā)現(xiàn)實(shí)現(xiàn)上傳的方式有:1.express中間件multer模塊(此效率最高,在express3.x原生支持,到了express4.x獨(dú)立成一個模塊了),2.connect-multiparty模塊(但現(xiàn)在 官方不推薦 ),3.使用multiparty模塊實(shí)現(xiàn)(此方法比較普遍),4.使用formidable插件實(shí)現(xiàn)(插件呢,就是簡單易懂);
最簡單的做法是通過“connect-multiparty”中間件實(shí)現(xiàn)上傳。
通過在項(xiàng)目中npm install connect-multiparty進(jìn)行安裝。
用法:
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打印出查看具體文件路徑。
只要在注釋的地方將臨時文件移動并重命名到實(shí)際目錄中即可完成上傳功能。
簡單。
官方地址:https://www.npmjs.com/package/connect-multiparty
但是官方不建議使用該中間件,建議直接使用“multiparty”,因?yàn)殄e誤處理比較麻煩。
下面就用“multiparty”實(shí)現(xiàn)一個版本。
1.使用express(版本是4.11.x)創(chuàng)建一個項(xiàng)目,采用默認(rèn)的jade作為模版引擎。
2.在項(xiàng)目目錄中,通過npm install multiparty進(jìn)行安裝必要組件。
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,實(shí)現(xiàn)上傳頁面和上傳響應(yīng)的后臺代碼。
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對象,并配置上傳目標(biāo)路徑
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;
//重命名為真實(shí)文件名
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+)實(shí)現(xiàn)文件上傳功能就全部介紹完了,希望對大家學(xué)習(xí)nodejs express相關(guān)知識有所幫助。
- node+axios實(shí)現(xiàn)服務(wù)端文件上傳示例
- 利用node+koa+axios實(shí)現(xiàn)圖片上傳和回顯功能
- 詳解Vue+axios+Node+express實(shí)現(xiàn)文件上傳(用戶頭像上傳)
- nodejs+express實(shí)現(xiàn)文件上傳下載管理網(wǎng)站
- nodejs基于express實(shí)現(xiàn)文件上傳的方法
- 詳解nodejs實(shí)現(xiàn)本地上傳圖片并預(yù)覽功能(express4.0+)
- Nodejs+express+html5 實(shí)現(xiàn)拖拽上傳
- 使用express+multer實(shí)現(xiàn)node中的圖片上傳功能
- 使用nodejs+express實(shí)現(xiàn)簡單的文件上傳功能
- Ajax異步文件上傳與NodeJS express服務(wù)端處理
- Nodejs進(jìn)階:基于express+multer的文件上傳實(shí)例
- NodeJS實(shí)現(xiàn)圖片上傳代碼(Express)
- node+express+axios實(shí)現(xiàn)單文件上傳功能
相關(guān)文章
淺談Node.js ORM框架Sequlize之表間關(guān)系
下面小編就為大家?guī)硪黄獪\談Node.js ORM框架Sequlize之表間關(guān)系。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
使用nvm進(jìn)行多個nodejs版本的統(tǒng)一管理
隨著前端項(xiàng)目的越來越多,不同項(xiàng)目使用的nodejs版本可能不一樣,導(dǎo)致在切換不同項(xiàng)目時需要更換不同的nodejs版本,非常麻煩,本次推薦使用nvm進(jìn)行多個nodejs版本的統(tǒng)一管理,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下2023-12-12
node.js事件循環(huán)機(jī)制及與js區(qū)別詳解
這篇文章主要為大家介紹了node.js事件循環(huán)機(jī)制及與js區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
nodejs根據(jù)ip數(shù)組在百度地圖中進(jìn)行定位
本文主要介紹了nodejs根據(jù)ip數(shù)組在百度地圖中進(jìn)行定位的方法,具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
node.js同步/異步文件讀寫-fs,Stream文件流操作實(shí)例詳解
這篇文章主要介紹了node.js同步/異步文件讀寫-fs,Stream文件流操作,結(jié)合實(shí)例形式詳細(xì)分析了node.js針對文件的同步/異步讀寫與文件流相關(guān)操作技巧,需要的朋友可以參考下2023-06-06

