本文介绍如何利用Node.js、Ajax和FormData对象实现网页无刷新上传图片。通过HTML5 input标签获取文件,使用JavaScript构造FormData并发送POST请求,后端借助Express官方推荐的Multer中间件处理文件存储。文章提供了完整的前后端代码示例及Multer配置说明,包括单文件与多文件上传的处理方式。
Node.js结合Ajax实现无刷新图片上传详解
传统方式上传图片通常需要提交form表单,这会导致页面刷新或跳转。
借助Ajax技术与FormData对象,可以有效避免页面刷新问题。
以下是实现该功能的关键代码示例。
HTML部分代码
<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>
请注意input标签中 type="file"属性的设置。
JavaScript部分代码
function uploadFile(){
var file = document.getElementById("file")
var formData = new FormData();
formData.append('file',file.files[0]);
$.ajax({
url: '/upload',
type: 'POST',
data: formData,
// async: false,
cache: false,
contentType: false,
processData: false,
success: function(data){
if(200 === data.code) {
$('#result').html("上传成功!");
$('#img').attr('src',data.data);
} else {
$('#result').html("上传失败!");
}
console.log('imgUploader upload success');
},
error: function(){
$("#result").html("与服务器通信发生错误");
}
});
}
function postPage() {
var uploada = document.getElementById('upload');
uploada.addEventListener("click",function () {
uploadFile();
},false);
}
window.onload = function () {
postPage();
}
Node.js后端处理代码
var storage = multer.diskStorage({
destination: function (req, file, cb){
cb(null, './public/images')
},
filename: function (req, file, cb){
cb(null, file.originalname)
}
});
var upload = multer({
storage: storage
});
router.post('/upload', upload.single('file'), function (req, res, next) {
var url = 'http://' + req.headers.host + '/images/' + req.file.originalname
res.json({
code : 200,
data : url
})
});
Multer是Express官方推荐的文件上传中间件。
文件上传可通过以下几种方法实现。
upload.single(‘file'), //适用于单文件上传。
upload.array(‘file',num), //适用于多文件上传,num为最多上传个数,上传文件的数量可以小于num。
此外,Multer还支持混合上传场景,例如同时上传1个A类文件和2个B类文件,具体用法可参考官方API文档。
参数file代表上传字段的名称,若使用form表单submit方式上传,该名称必须与表单中input的name属性保持一致。
上传文件的大小限制、文件名限制等均可在limits配置对象中设置,具体支持的属性请参考官方API文档。
Multer官方文档链接
本文内容希望对您的学习有所帮助,欢迎继续支持本站。