真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

node如何實現(xiàn)圖片上傳-創(chuàng)新互聯(lián)

這篇文章主要介紹node如何實現(xiàn)圖片上傳,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司公司2013年成立,先為尖扎等服務(wù)建站,尖扎等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為尖扎企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在web開發(fā)中,文件上傳是一個很重要的問題,尤其是圖片上傳,以及由此延伸的“進度條”、“文件大小”、以及著名的“跨域”等問題。

本demo演示的是圖片的上傳,服務(wù)器代碼為node。

前端部分




  
  Title
  


  
  上傳

  

用axios發(fā)送請求 —— 其實我們這里也可以采用另一種“跨域請求方式”(vue-resource),但這里我想了想。還是采用后端設(shè)置跨域 的方式。

后端部分

這是本文要介紹的重點,為了用高效流暢的方式來解析文件上傳請求,我們先引入formidable庫:

npm install formidable --save

formidable的流式解析器讓它成為了處理文件上傳的絕佳選擇,也就是說它能隨著數(shù)據(jù)塊的上傳接收它們,解析它們,并吐出特定的部分,相信熟悉流的朋友會很好理解。這種方式不僅快,還不會因為需要大量緩沖而導(dǎo)致內(nèi)存膨脹,即便像視頻這種大型文件,也不會把進程壓垮。
當(dāng)然,我們要創(chuàng)建myImage文件,用于存放上傳的圖片,接著,我們創(chuàng)建一個IncomingForm實例form,并且設(shè)置存放路徑為myImage文件夾。代碼如下:

const http=require('http');
const formidable=require('formidable');

var server=http.createServer(function(req,res){
	// 后端設(shè)置跨域
	res.setHeader('Access-Control-Allow-Origin','*');
	res.setHeader('Access-Control-Allow-Headers','Content-Type');
	res.setHeader('Content-Type','application/json');
	
	switch(req.method){
		case 'OPTIONS':
			res.statusCode=200;
			res.end();
			break;
		case 'POST':
			upload(req,res);
			break;
	}
})

function upload(req,res){
	if(!isFormData(req)){
		res.statusCode=400;
		res.end('請求錯誤,請使用multipart/form-data格式');
		return;
	}
	
	var form=new formidable.IncomingForm();
	// 設(shè)置上傳圖片保存文件
	form.uploadDir='./myImage';
	form.keepExtensions=true;
	
	form.on('field',(field,value)=>{
		console.log(field);
		console.log(value);
	})
	form.on('end',()=>{
		res.end('上傳完成!');
	})
	form.parse(req);
}

function isFormData(req){
	let type=req.headers['content-type'] || '';
	return type.includes('multipart/form-data');
}

server.listen(8081,function(){
	console.log('port is on 8081');
})

6、7、8三行setHeader尤其重要,這是后端跨域的精髓!

添加上傳進度

這個也是我們常用的,并且所希望看到的!這會給用戶好的體驗感。
我們只要在上面代碼中添加:

form.on('progress',(bytesReceived,bytesExpected)=>{
		var precent=Math.floor(bytesReceived/bytesExpected*100);
		console.log(precent);
	})

然后把這個進度傳回到用戶的瀏覽器中去,即可。

formidable

formidable模塊實現(xiàn)了上傳和編碼圖片和視頻。它支持GB級上傳數(shù)據(jù)處理,支持多種客戶端數(shù)據(jù)提交。有極高的測試覆蓋率,非常適合在生產(chǎn)環(huán)境中使用。
formidable模塊的方法和屬性 —— 圍繞:Formidable.incomingForm()

可以通過該方法創(chuàng)建一個form表單:

var form = new formidable.IncomingForm();

通過encoding屬性設(shè)置字段編碼

form.encoding='utf-8';

通過uploadDir設(shè)置上傳文件時臨時文件存放的位置,默認上傳的臨時文件存放的位置為os.tmpDir();

form.uploadDir='/tmp/';

通過keepExtensions屬性可以設(shè)置文件上傳時臨時文件的文件名是否包括擴展名。如果該值為真,即為包括擴展名,否則,就不包括擴展名。

form.keepExtensions=false

還有比較重要的“ parse方法 ”:解析node.js中request請求中包含的form表單提交的數(shù)據(jù)。cb為處理請求的回調(diào)函數(shù)(不必須)。

form.parse(req,function(err,fields,files){
    //...
});

以上是“node如何實現(xiàn)圖片上傳”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文標(biāo)題:node如何實現(xiàn)圖片上傳-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/cdiosg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部