nodejs利用ajax实现网页无刷新上传图片实例代码


Posted in NodeJs onJune 06, 2017

通常情况下上传图片是要通过提交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"

js部分:

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();
}

nodejs部分:

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。

同时还提供了混合上传,比如A类文件1个,B类文件2个。官方API有详细说明。

file为上传字段名称,当使用form表单submit方式上传时,必须与表单上传的name属性保持一致。

对上传文件大小限制,名称限制等均可在limits中加上,具体可加属性,请参考官方api。

multer官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
跟我学Nodejs(二)--- Node.js事件模块
May 21 NodeJs
nodejs npm install全局安装和本地安装的区别
Jun 05 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 #NodeJs
详解Nodejs之静态资源处理
Jun 05 #NodeJs
nodejs集成sqlite使用示例
Jun 05 #NodeJs
详解nodeJS之二进制buffer对象
Jun 03 #NodeJs
深入理解Nodejs Global 模块
Jun 03 #NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 #NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 #NodeJs
You might like
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
python查询mysql,返回json的实例
2018/03/26 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
python实现微信小程序自动回复
2018/09/10 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
千元咖啡店的创业计划书范文
2013/12/29 职场文书
工作的心得体会
2013/12/31 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
军训感想500字
2014/02/20 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle