NodeJS實(shí)現(xiàn)圖片上傳代碼(Express)
文件上傳是每個網(wǎng)站不可避免的,最近需要做些上傳圖片的功能,主要解決兩個問題,一個是文件上傳樣式和服務(wù)端路徑保存,功能很簡單,做起來倒是沒那么簡單,先從最簡單的頁面的上傳頁面的樣式開始。
頁面樣式
Html頁面默認(rèn)的上傳的是比較難看的,需要重做一個背景圖片,通過背景圖片添加上傳的圖片:

上傳圖片樣式:
<div class="upload-container"> <input type="file" name="fileToUpload" id="fileToUpload" class="fileupload" /> </div>
CSS樣式:
.upload-container {
background-image: url(../../images/rv/add.jpg);
background-repeat: no-repeat;
width: 180px;
height: 200px;
padding-bottom: 10px;
display: inline-block;
vertical-align: middle;
.fileupload {
opacity: 0;
filter: alpha(opacity=0);
width: 200px;
height: 200px;
}
}
Html點(diǎn)擊上傳有兩種比較常用的方式iFrame上傳和Ajax上傳,本文采用了Ajax上傳是HTML5提出了XMLHttpRequest對象的第二版,傳遞文件數(shù)據(jù)主要是通過FormData實(shí)現(xiàn):
$('.fileupload').change(function(event) {
/* Act on the event */
if ($('.fileupload').val().length) {
var fileName = $('.fileupload').val();
var extension = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
if (extension == ".jpg" || extension == ".png") {
var data = new FormData();
data.append('upload', $('#fileToUpload')[0].files[0]);
$.ajax({
url: 'apply/upload',
type: 'POST',
data: data,
cache: false,
contentType: false, //不可缺參數(shù)
processData: false, //不可缺參數(shù)
success: function(data) {
console.log(data);
},
error: function() {
console.log('error');
}
});
}
}
});
服務(wù)端保存
NodeJS服務(wù)端保存需要使用了第三方插件node-formidable,npm安裝地址:
npm install formidable@latest
上傳圖片
var cacheFolder = 'public/images/uploadcache/';<br>exports.upload = function(req, res) {
var currentUser = req.session.user;
var userDirPath =cacheFolder+ currentUser.id;
if (!fs.existsSync(userDirPath)) {
fs.mkdirSync(userDirPath);
}
var form = new formidable.IncomingForm(); //創(chuàng)建上傳表單
form.encoding = 'utf-8'; //設(shè)置編輯
form.uploadDir = userDirPath; //設(shè)置上傳目錄
form.keepExtensions = true; //保留后綴
form.maxFieldsSize = 2 * 1024 * 1024; //文件大小
form.type = true;
var displayUrl;
form.parse(req, function(err, fields, files) {
if (err) {
res.send(err);
return;
}
var extName = ''; //后綴名
switch (files.upload.type) {
case 'image/pjpeg':
extName = 'jpg';
break;
case 'image/jpeg':
extName = 'jpg';
break;
case 'image/png':
extName = 'png';
break;
case 'image/x-png':
extName = 'png';
break;
}
if (extName.length === 0) {
res.send({
code: 202,
msg: '只支持png和jpg格式圖片'
});
return;
} else {
var avatarName = '/' + Date.now() + '.' + extName;
var newPath = form.uploadDir + avatarName;
displayUrl = UPLOAD_FOLDER + currentUser.id + avatarName;
fs.renameSync(files.upload.path, newPath); //重命名
res.send({
code: 200,
msg: displayUrl
});
}
});
};
不同用戶上傳置放在不同的位置,根據(jù)需求來設(shè)置,當(dāng)然也有可以每張圖片都給不同的id編號,推薦第三方uuid插件:https://github.com/broofa/node-uuid
文件重命名:
fs.renameSync(files.upload.path, newPath); //重命名
文件上傳進(jìn)度:
form.on('progress', function(bytesReceived, bytesExpected) {
});
node-formidable有很多官方API還有很多設(shè)置的選項(xiàng),本文根據(jù)需求設(shè)置了幾項(xiàng),有額外需求的可以參考官方地址~
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 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)拖拽上傳
- 基于nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能
- 使用express+multer實(shí)現(xiàn)node中的圖片上傳功能
- 使用nodejs+express實(shí)現(xiàn)簡單的文件上傳功能
- Ajax異步文件上傳與NodeJS express服務(wù)端處理
- Nodejs進(jìn)階:基于express+multer的文件上傳實(shí)例
- node+express+axios實(shí)現(xiàn)單文件上傳功能
相關(guān)文章
如何利用node實(shí)現(xiàn)靜態(tài)文件緩存詳解
HTTP 緩存機(jī)制作為 Web 應(yīng)用性能優(yōu)化的重要手段,對于從事 Web 開發(fā)的同學(xué)們來說,應(yīng)該是知識體系的基礎(chǔ)環(huán)節(jié),也是想要成為前端架構(gòu)的必備技能,這篇文章主要給大家介紹了關(guān)于如何利用node實(shí)現(xiàn)靜態(tài)文件緩存的相關(guān)資料,需要的朋友可以參考下2021-07-07
node省市區(qū)三級數(shù)據(jù)性能測評實(shí)例分析
這篇文章主要介紹了node省市區(qū)三級數(shù)據(jù)性能,結(jié)合具體實(shí)例形式評測分析了node省市區(qū)三級數(shù)據(jù)的實(shí)現(xiàn)、改進(jìn)方法與運(yùn)行效率,需要的朋友可以參考下2019-11-11
詳解從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信
這篇文章主要介紹了從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
利用yarn代替npm管理前端項(xiàng)目模塊依賴的方法詳解
這篇文章主要給大家介紹了關(guān)于利用yarn代替npm管理前端項(xiàng)目模塊依賴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09

