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è)亂序名稱(chēng)但是沒(méi)有后綴,所以我增加了這個(gè)功能。
req.file是文件信息,取得原名稱(chēng),經(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訪(fǎng)問(wèn)結(jié)果是會(huì)出現(xiàn)下載還是查看的選項(xiàng)。。很迷。總之就是這樣了,一晚上的努力,我很滿(mǎn)足。。嘻嘻
服務(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("名稱(chēng):%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);
客戶(hù)端
//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實(shí)現(xiàn)JSON文件自動(dòng)轉(zhuǎn)Excel的工具(推薦)
這篇文章主要介紹了使用nodejs實(shí)現(xiàn),JSON文件自動(dòng)轉(zhuǎn)Excel的工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
node作為中間服務(wù)層如何發(fā)送請(qǐng)求(發(fā)送請(qǐng)求的實(shí)現(xiàn)方法詳解)
node作為中間服務(wù)層如何發(fā)送請(qǐng)求?下面小編就為大家分享一下發(fā)送請(qǐng)求的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2018-01-01
NodeJs生成sitemap站點(diǎn)地圖的方法示例
這篇文章主要介紹了NodeJs生成sitemap站點(diǎn)地圖的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06

