nodejs multer實(shí)現(xiàn)文件上傳與下載
本文實(shí)例為大家分享了nodejs實(shí)現(xiàn)文件上傳下載的具體代碼,供大家參考,具體內(nèi)容如下
1.介紹
做了一個(gè)關(guān)于文件上傳和下載的demo ,選擇了Multer 作為中間件進(jìn)行數(shù)據(jù)處理。
關(guān)于multer請(qǐng)參考中文翻譯文檔 https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md 或者官方文檔
2. upload 文件上傳
html form標(biāo)簽內(nèi)設(shè)置enctype=”multipart/form-data”是必須的,這樣才可以上傳文件,方式為post ,在服務(wù)端使用multer時(shí),基本與官網(wǎng)相同,引用中間件multer,app.post(‘\upload',upload.single(‘name'),function(){}); 指定單文件上傳,參數(shù)是html的input里面的name ,這樣就可以上傳成功,但是問(wèn)題是multer不會(huì)管你的后綴,上傳到upload文件夾的文件有一個(gè)亂序名稱但是沒(méi)有后綴,所以我增加了這個(gè)功能。
req.file是文件信息,取得原名稱,經(jīng)過(guò)數(shù)組以及堆棧等處理得到后綴'.jpg' , 用fs.renameSync()方法重命名文件,加上本來(lái)的后綴。這樣真正的上傳成功。唯一的缺點(diǎn)是沒(méi)有實(shí)現(xiàn)改變文件名字,使用官網(wǎng)方式出現(xiàn)了錯(cuò)誤,所以沒(méi)有深究。。
3.download 文件下載
網(wǎng)上基本上是express對(duì)res.download的封裝以及fs方法為主,注意要把文件夾設(shè)定為靜態(tài)文件。出現(xiàn)的問(wèn)題是點(diǎn)擊之后就會(huì)在新頁(yè)面顯示要下載的文件,無(wú)論是圖片還是音樂(lè)。。這讓我很困擾,但是找了很久也沒(méi)有很好的解決。用IE訪問(wèn)結(jié)果是會(huì)出現(xiàn)下載還是查看的選項(xiàng)。。很迷??傊褪沁@樣了,一晚上的努力,我很滿足。。嘻嘻
服務(wù)端
//index.js
var fs = require('fs')
var express = require('express')
var multer = require('multer')
const path = require('path');
var app = express();
var upload = multer({dest:'upload/'});
//多文件上傳 (限定上傳文件個(gè)數(shù))(沒(méi)有修改后綴)
app.post('/upload-multi',upload.array('myfile',2),function(req,res,next){
res.send("2 done");
})
//單文件上傳獲取信息
app.post('/upload-single',upload.single('myfile'),function(req,res,next){
var file=req.file;
// console.log("名稱:%s",file.originalname);
// console.log("mime:%s",file.mimetype);
//以下代碼得到文件后綴
name=file.originalname;
nameArray=name.split('');
var nameMime=[];
l=nameArray.pop();
nameMime.unshift(l);
while(nameArray.length!=0&&l!='.'){
l=nameArray.pop();
nameMime.unshift(l);
}
//Mime是文件的后綴
Mime=nameMime.join('');
console.log(Mime);
res.send("done");
//重命名文件 加上文件后綴
fs.renameSync('./upload/'+file.filename,'./upload/'+file.filename+Mime);
})
//文件下載嘗試(chrome會(huì)直接在頁(yè)面上展示。.最后也沒(méi)有解決)
//設(shè)置download文件夾為靜態(tài) 才能下載
app.use('/download', express.static(path.join(__dirname, 'download')));
// app.get('/download',function(req,res){
// var path='./download/aa.mp3';
// res.download(path,'aa.mp3');
// });
app.get('/download', function(req, res){
var file = __dirname + '/download/aa.mp3';
res.download(file);
});
app.get('/',function(req,res,next){
res.sendFile(__dirname+"/index.html");
})
app.listen(3000);
客戶端
//index.html <!DOCTYPE html> <html> <head> <title>上傳文件</title> <meta charset="utf-8"> </head> <body> <form enctype="multipart/form-data" action="/upload-single" method="post"> <input type="file" name="myfile"></input> <input type="submit" value="提交"></input> </form> <form enctype="multipart/form-data" action="/upload-multi" method="post"> <input type="file" name="myfile"></input> <input type="file" name="myfile"></input> <input type="submit" value="提交"></input> </form> <a href="download/aa.mp3" rel="external nofollow" >下載文件</a> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于nodejs 的多頁(yè)面爬蟲(chóng)實(shí)例代碼
本篇文章主要介紹了基于nodejs 的多頁(yè)面爬蟲(chóng) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Node.js+jade+mongodb+mongoose實(shí)現(xiàn)爬蟲(chóng)分離入庫(kù)與生成靜態(tài)文件的方法
下面小編就為大家?guī)?lái)一篇Node.js+jade+mongodb+mongoose實(shí)現(xiàn)爬蟲(chóng)分離入庫(kù)與生成靜態(tài)文件的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮
這篇文章主要介紹了Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮,nodejs為我們提供了一個(gè)zlib內(nèi)置模塊,我們可以使用它其中的gzip方法來(lái)對(duì)傳遞的數(shù)據(jù)進(jìn)行壓縮,從而提高數(shù)據(jù)傳遞效率,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09
基于Node.js實(shí)現(xiàn)一鍵生成個(gè)性化二維碼
這篇文章主要為大家詳細(xì)介紹了如何使用Node.js、Jimp和QRCode庫(kù),結(jié)合一個(gè)簡(jiǎn)單的腳本,通過(guò)命令行命令來(lái)快速給二維碼加上指定的背景,打造更有個(gè)性化的二維碼,感興趣的可以了解下2024-03-03
詳解Nodejs 通過(guò) fs.createWriteStream 保存文件
本篇文章主要介紹了Nodejs 通過(guò) fs.createWriteStream 保存文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
NodeJS實(shí)現(xiàn)視頻轉(zhuǎn)碼的示例代碼
本篇文章主要介紹了NodeJS實(shí)現(xiàn)視頻轉(zhuǎn)碼的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
Thinkjs3新手入門(mén)之如何使用靜態(tài)資源目錄
最近在學(xué)習(xí)thinkjs3,發(fā)現(xiàn)有些地方還是有必要整理下的,下面這篇文章主要給大家介紹了關(guān)于Thinkjs3新手入門(mén)之如何使用靜態(tài)資源目錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12
在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡(jiǎn)單方法
這篇文章主要介紹了在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡(jiǎn)單方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08

