详解nodejs实现本地上传图片并预览功能(express4.0+)


Posted in NodeJs onJune 28, 2017

Express为:4.13.1  multyparty: 4.1.2

代码主要实现本地图片上传到nodejs服务器的文件下,通过取图片路径进行图片预览

写在前面:计划实现图片上传预览功能,但是本地图片上传所获得路径为 C:\fakepath\"+文件名的形式,得不到文件真实路径,所以无法直接预览,于是采用将图片上传至服务器,传回服务器路径,实现预览。前端采用通过ajax方式上传文件,使用FormData进行ajax请求  ,nodejs端采用multiparty模块

相关查看文档:

node-multiparty github

FormData - Web APIs | MDN

部分代码:

<form name='picForm' action = "javascript:;"method="post" encype = "multipart/form-data" >
  <input type="file" id="test" id="j_imgfile">
</form>
<div>
  <img src="" id="j_imgPic">
</div>

 js中采用change事件,即当选完图片时就发送ajax请求

$('#j_imgfile').on('change',function(){
    // 判断上传文件类型
    var objFile = $('#j_imgfile').val();
    var objType = objFile.substring(objFile.lastIndexOf(".")).toLowerCase();
    var formData = new FormData(document.forms.namedItem("picForm"));
    console.log(objType);
    if(!(objType == '.jpg'||objType == '.png'))
    {
      alert("请上传jpg、png类型图片");
      return false;
    }else{
      $.ajax({
        type : 'post',
        url : '/uploadUserImgPre',
        data: formData ,
        processData:false,
        async:false,
        cache: false, 
         contentType: false, 
        success:function(re){
          re.imgSrc = re.imgSrc.replace('public','');
          re.imgSrc = re.imgSrc.replace(/\\/g,'\/');
          $('#j_imgPic').attr('src',re.imgSrc);
        },
        error:function(re){
          console.log(re);
        }
      });  
    }
  });

 nodejs app.js里代码

app.post('/uploadUserImgPre',routes.users.uploadUserImgPre);

routes/users.js 里代码

exports.uploadUserImgPre = function(req, res, next) {
 //生成multiparty对象,并配置上传目标路径
 var form = new multiparty.Form({uploadDir: './public/files/images'});
 form.parse(req, function(err, fields, files) {
  var filesTmp = JSON.stringify(files);
 
  if(err){
   console.log('parse error: ' + err);
  } else {
   testJson = eval("(" + filesTmp+ ")"); 
   console.log(testJson.fileField[0].path);
   res.json({imgSrc:testJson.fileField[0].path})
   console.log('rename ok');
  }
 });
}

部分说明:

文件上传至服务器后 路径path变为:public\files\images\W-jy9YsxsPjNpQHslzGvdXBk.jpg

由于在app.js中设置过public为默认路径,所以整理地址时需要去掉public,并且把‘\'变成‘/'

app.use(express.static(path.join(__dirname, 'public')));

 最后效果大概是这样的,html部分不一样~我的是jade模板,还有css什么的,并木有列出来

点击空白处,上传图片,接下来的功能就是点击上传把地址放到数据库里~(这个功能还木有做呢)

详解nodejs实现本地上传图片并预览功能(express4.0+)

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

NodeJs 相关文章推荐
浅谈NodeJS中require路径问题
May 07 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 #NodeJs
NodeJS自定义模块写法(详解)
Jun 27 #NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 #NodeJs
NodeJs中express框架的send()方法简介
Jun 20 #NodeJs
深入浅析Nodejs的Http模块
Jun 20 #NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 #NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 #NodeJs
You might like
php zip文件解压类代码
2009/12/02 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python中字符串对齐方法介绍
2015/05/21 Python
在类Unix系统上开始Python3编程入门
2015/08/20 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
使用Python设计一个代码统计工具
2018/04/04 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
Python sublime安装及配置过程详解
2020/06/29 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
北京天润融通.net面试题笔试题
2012/02/20 面试题
学雷锋活动倡议书
2014/08/30 职场文书
创新社会管理心得体会
2014/09/12 职场文书
2014年教务处工作总结
2014/12/03 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python