• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > node.js 通过ajax上传图片

node.js 通过ajax上传图片

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了node.js ajax,node.js express ajax,node ajax,node.js图片上传,node.js 上传文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

node.js 通过ajax上传图片


这个阶段,利用晚上剩余的时间用node.js+mongdb+express+jade去实现自己的一个博客网站,里面的发表博客中需要用到上传图片,嵌入到自己用textarea标签实现的markdown编辑器中。这部分实现是利用了html5的formData函数去实现

html代码(jade):

  1. form#uploadfile
  2. div.form-group
  3. input#inputfile(type="file" name="inputfile")
  4. p.help-block#upfiletip 只支持png和ipg格式的图片上传
  5. button.btn.btn-success(type="button" onclick="upFile()") 上传

ajax代码(javascript):

  1. //判断图片的格式是否是png/ipg的格式
  2. function judgePhotoExt(name){
  3. if(name.length === 0){
  4. $("#upfiletip").css("color","red");
  5. $("#upfiletip").text = "你没有选择任何图片!!!"
  6. return false;
  7. }
  8. var extName = name.substring(name.lastIndexOf('.'),name.length).toLowerCase();
  9. if(extName != '.png' && extName != '.ipg'){
  10. $("#upfiletip").css("color","red");
  11. $("#upfiletip").text = "只支持png和ipg格式的格式的文件!!!"
  12. return false;
  13. }
  14. return true;
  15. }

  16. //上传图片文件
  17. function upFile(){
  18. var filename = $("#inputfile").val();
  19. if(judgePhotoExt(filename)){
  20. var data = new FormData();
  21.     var files = $("#inputfile")[0].files;
  22. if(files){
  23.       data.append("file", files[0]);
  24. }
  25. $.ajax({
  26. url: '/blog/photo/new',
  27. type: 'POST',
  28. data: data,
  29. async: false,
  30. cache: false,
  31. contentType: false,
  32. processData: false,
  33. success: function(data){
  34. var text = $("#content-textarea").val();
  35. text = text+"![图片提示]("+data+")";
  36. $("#content-textarea").val(text);
  37. $('#imageModal').modal('hide');
  38. },
  39. error: function(err){
  40. console.log(err);
  41. }
  42. })
  43. }
  44. }
注意:其中一定要注意的点:processData的属性要设置为false,这个是html5的属性,如果没有设置为false的话,这个地方会出问题。主要是文件的内容不希望转换成字符串。具体可查看jquery ajax的参数解释:http://www.w3school.com.cn/jquery/ajax_ajax.asp

对于FormData对象,你可以先创建一个空的FormData对象,然后使用append()方法向该对象里添加字段(引用别的网站的描述)
比如:

  1. var oMyForm = new FormData();

  2. oMyForm.append("username", "Groucho");
  3. oMyForm.append("accountnum", 123456); // 数字123456被立即转换成字符串"123456"

  4. // fileInputElement中已经包含了用户所选择的文件
  5. oMyForm.append("userfile", fileInputElement.files[0]);

  6. var oFileBody = "<a id="a"><b id="b">hey!"; // Blob对象包含的文件内容
  7. var oBlob = new Blob([oFileBody], { type: "text/xml"});

  8. oMyForm.append("webmasterfile", oBlob);

  9. var oReq = new XMLHttpRequest();
  10. oReq.open("POST", "http://foo.com/submitform.php");
  11. oReq.send(oMyForm);
这部分内容需要查看FormData对象的具体内容,可查看该网址:http://www.cnblogs.com/lhb25/p/html5-formdata-tutorials.html

node.js后台代码如下:

  1. router.post('/photo/new',function(req,res,next){
  2. let form = new formidable.IncomingForm(); //创建上传表单
  3. form.uploadDir = UPLOAD_PATH;
  4. form.keepExtensions = true; //保留后缀
  5. form.maxFieldsSize = 4*1024*1024; //文件大小
  6. form.parse(req,function(err,fields,files){
  7. if(err){
  8. res.send("插入标签失败");
  9. return;
  10. }
  11. let extName = '';
  12. let urls = [];
  13. for(var key in files){
  14. let file = files[key];
  15. switch(file.type){
  16. case 'image/pjpeg':
  17. extName = 'jpg';
  18. break;
  19. case 'image/jpeg':
  20. extName = 'jpg';
  21. break;
  22. case 'image/png':
  23. extName = 'png';
  24. case 'image/x-png':
  25. extName = 'png';
  26. break;
  27. }
  28. if(extName.length === 0){
  29. res.send("只支持png和jpg格式的图片文件");
  30. return;
  31. }
  32. let saveName = uuid.v1()+'.'+extName;
  33. let savePath = form.uploadDir+saveName;
  34. urls.push(PHOTO_URL+saveName);
  35. fs.renameSync(file.path,savePath);
  36. }
  37. res.send(urls[0]);
  38. })
  39. })

使用formidable库辅助实现

其实里面最重要的还是FormData的使用,用html5实现这部分的异步上传还是比较方便的

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • node.js 通过ajax上传图片

相关文章

  • 2017-05-26android开发环境以及genymotion虚拟机配合HBuilder测试(自总结),genymotionhbuilder
  • 2017-05-26Android 5.0(包含5.0以下版本) 获取栈顶应用程序包名,android包名
  • 2017-05-26android动画详解一 概述
  • 2017-05-26首页2--动态自定义圆形进度条,首页2--圆形进度条
  • 2017-05-222.6.1 PopupWindow(悬浮框)的基本使用
  • 2017-05-26Android 手机卫士--设置界面&amp;功能列表界面跳转逻辑处理,android卫士--界面
  • 2017-05-26生日星座自动匹配,生日星座匹配
  • 2017-05-26WEB服务器、应用程序服务器、HTTP服务器区别
  • 2017-05-228.3.10 Paint API之—— ColorFilter(颜色过滤器)(2-3)
  • 2017-05-26我的android学习经历5,android学习经历5

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android之SQLite数据库篇,androidsqlite
    • [android] 与PHP的session进行交互demo,androidsession
    • android设备使用usb串口传输数据,android设备usb串口
    • linux命令之tcpdump
    • Android 手把手带你玩转自定义相机
    • Java入门(二)——果然断更的都是要受惩罚的。。。,java受惩罚
    • Android SwipeRefreshLayout下拉刷新与上拉加载+滑动删除
    • Android Support Library 之 Toolbar
    • Android源码之陌陌源码,android源码
    • Android蓝牙技术Bluetooth初体验

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有