使用express+multer實現(xiàn)node中的圖片上傳功能
下文給大家介紹使用express+multer實現(xiàn)node中的圖片上傳功能,具體內(nèi)容介紹如下所示:
在前端中,我們使用ajax來異步上傳圖片,使用file-input來上傳圖片,使用formdata對象來處理圖片數(shù)據(jù),post到服務(wù)器中
在node中使用multer中間件來對上傳路由接口進(jìn)行處理
package.json

html部分
<body>
<div class="form-group">
<label>File input:</label>
<input type="file" name="file" id="file">
<p id="result"></p>
<img id="img" src="">
</div>
<button id="upload" class="btn btn-default">提交</button>
</body>
js部分
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
//上傳圖片的業(yè)務(wù)邏輯函數(shù)
function uploadFile(){
//上傳圖片的input
var file = document.getElementById("file")
//因為準(zhǔn)備用post提交,又因為圖片的內(nèi)容比較大,所以我們選擇使用formdata來承載數(shù)據(jù)
//創(chuàng)建formdata對象
var formData = new FormData();
//給formdata對象中放入數(shù)據(jù)(鍵值對的方式)
formData.append('file',file.files[0]);
//提交請求
$.ajax({
url: '/upload',//請求路徑
type: 'POST',
data: formData,
contentType: false,//為了讓瀏覽器根據(jù)傳入的formdata來判斷contentType
processData: false,//同上
success: function(data){
if(200 === data.code) {
$('#result').html("上傳成功!");
$('#img').attr('src',data.data);
} else {
$('#result').html("上傳失??!");
}
console.log(2)
},
error: function(){
$("#result").html("與服務(wù)器通信發(fā)生錯誤");
}
});
console.log(1)
}
//給按鈕添加點(diǎn)擊事件
function postPage() {
//上傳按鈕
var uploada = document.getElementById('upload');
uploada.addEventListener("click",function () {
uploadFile();
},false);
}
window.onload = function () {
postPage();
}
</script>
NodeJS邏輯代碼
const http = require('http')
const path = require('path')
const express = require('express')
//是nodejs中處理multipart/form-data數(shù)據(jù)格式(主要用在上傳功能中)的中間件
//文檔:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
const multer = require('multer')
const app = express()
//配置express的靜態(tài)目錄
app.use(express.static(path.join(__dirname, 'public')));
app.get('/',(req,res)=>{
res.sendFile(__dirname+'/index.html')
})
//配置diskStorage來控制文件存儲的位置以及文件名字等
var storage = multer.diskStorage({
//確定圖片存儲的位置
destination: function (req, file, cb){
cb(null, './public/uploadImgs')
},

//確定圖片存儲時的名字,注意,如果使用原名,可能會造成再次上傳同一張圖片的時候的沖突
filename: function (req, file, cb){
cb(null, Date.now()+file.originalname)
}
});
//生成的專門處理上傳的一個工具,可以傳入storage、limits等配置
var upload = multer({storage: storage});
//接收上傳圖片請求的接口
app.post('/upload', upload.single('file'), function (req, res, next) {
//圖片已經(jīng)被放入到服務(wù)器里,且req也已經(jīng)被upload中間件給處理好了(加上了file等信息)
//線上的也就是服務(wù)器中的圖片的絕對地址
var url = '/uploadImgs/' + req.file.filename
res.json({
code : 200,
data : url
})
});
http.createServer(app).listen(3000,()=>{
console.log('server is listening')
})
自我感覺良好,不知道博客園為什么要給我移除首頁....
再發(fā)一次,if(delete){
alert('Never publish anything again.')
}else{
alert(1)
}
總結(jié)
以上所述是小編給大家介紹的使用express+multer實現(xiàn)node中的圖片上傳功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Node中文件斷點(diǎn)續(xù)傳原理和方法總結(jié)
在之前做過一個小項目,涉及到了文件上傳,在大文件上面使用了斷點(diǎn)續(xù)傳,降低了服務(wù)器方面的壓力,現(xiàn)在小編把Node中文件斷點(diǎn)續(xù)傳原理和方法總結(jié)分享給大家,感興趣的朋友一起看看吧2022-01-01
Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解
這篇文章主要為大家介紹了Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
node強(qiáng)緩存和協(xié)商緩存實戰(zhàn)示例
這篇文章主要為大家介紹了node強(qiáng)緩存和協(xié)商緩存實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼
這篇文章主要介紹了NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
nodejs同步調(diào)用獲取mysql數(shù)據(jù)時遇到的大坑
今天小編就為大家分享一篇關(guān)于nodejs同步調(diào)用獲取mysql數(shù)據(jù)時遇到的大坑,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03

