node.js文件上传处理示例


Posted in Javascript onOctober 27, 2016

直入主题,在Node.js web 开发基本框架的前提下,我们来做一个文件上传功能

上传的handler比较简单,网上都能找到

var url=require('url');
var exec=require('child_process').exec;
var querystring=require('querystring');

/********************************文件上传 第3方模块测试*************************/
function fileUploadForm(request,response){
 response.writeHead(200,{'Content-Type':'text/html'});
 var body = '<html>'+
  '<head>'+
  '<meta http-equiv="Content-Type" '+
  'content="text/html; charset=UTF-8" />'+
  '</head>'+
  '<body>'+
  '<form action="/fileuploadaction" method="post" enctype="multipart/form-data">'+
  '<input name="name" type="text" />'+
  '<input name="upload" type="file" />'+
  '<input type="submit" value="Upload" />'+
  '</form>'+
  '</body>'+
  '</html>';
 response.write(body);
 response.end();
}

<span style="color: rgb(255, 0, 0);">function fileUploadAction(request,response){
 var fs=require('fs');
 var formidable=require('formidable');
 var baseUploadPath="./media/upload/";
 var form=new formidable.IncomingForm();
 form.uploadDir='./var/tmp';
 form.parse(request,function(error,fields,files){
  if(!error){
   console.log(fields);
   var desUploadName=baseUploadPath+files.upload.name;
   fs.renameSync(files.upload.path, desUploadName);
   response.writeHead(200,{'Content-Type':'text/html'});//值得注意的是这里的response.writeHead()函数内容要写在form.parse()的callback中要不不会显示
   response.write('received image:</br>');
   response.write('<img src="/showuploadimage?name='+files.upload.name+'" />');
   response.end();
  }
 });
}</span>

function showUploadImage(request,response){
 var fs=require('fs');
 var imageName=querystring.parse(url.parse(request.url).query);
 var baseUploadPath="./media/upload/";
 fs.readFile(baseUploadPath+imageName.name, "binary", function(error, file) {
  if(error) {
   response.writeHead(500, {"Content-Type": "text/plain"});
   response.write(error + "\n");
   response.end();
  } else {
   response.writeHead(200, {"Content-Type": "image/png"});
   response.write(file, "binary");
   response.end();
  }
 });
}
exports.fileuploadform=fileUploadForm;
exports.fileuploadaction=fileUploadAction;
exports.showuploadimage=showUploadImage;

同时在index.js中添加

handle['/fileuploadform']=handlers.fileuploadform; 
handle['/fileuploadaction']=handlers.fileuploadaction; 
handle['/showuploadimage']=handlers.showuploadimage;

有一点需要注意的是,在有需要处理文件上传的时候,不能在server中添加

request.setEncoding('utf8');//设置这个很可能导致上传失败,这是formidable模块的一个bug吧


request.addListener("data",function(tempPostData){ 
   postData+=tempPostData; 
  }); 
  request.addListener("end",function(){ 
   route(request,response,postData,handle); 
  });

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

Javascript 相关文章推荐
IE 缓存策略的BUG的解决方法
Jul 21 Javascript
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
ExtJS 入门
Oct 29 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
Apr 10 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
Nov 10 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
Koa 使用小技巧(小结)
Oct 22 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
Dec 12 Javascript
Vue.js表单控件实践
Oct 27 #Javascript
vue实现可增删查改的成绩单
Oct 27 #Javascript
vuex实现简易计数器
Oct 27 #Javascript
微信小程序  生命周期详解
Oct 27 #Javascript
require.js+vue开发微信上传图片组件
Oct 27 #Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
Oct 27 #Javascript
vue开发心得和技巧分享
Oct 27 #Javascript
You might like
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
php之可变函数的实例详解
2017/09/13 PHP
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
Python 解析XML文件
2009/04/15 Python
Python yield 小结和实例
2014/04/25 Python
python中对list去重的多种方法
2014/09/18 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
python 读取文件并替换字段的实例
2018/07/12 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
五一促销活动总结
2014/07/01 职场文书
团委工作总结2015
2015/04/02 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python