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 相关文章推荐
在浏览器中获取当前执行的脚本文件名的代码
Jul 19 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
利用毫秒减值计算时长的js代码
Sep 22 Javascript
javascript学习笔记之10个原生技巧
May 21 Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 Javascript
js实现使用鼠标拖拽切换图片的方法
May 04 Javascript
Bootstrap表单布局样式代码
May 31 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
Jan 19 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
webpack 样式加载的实现原理
Jun 12 Javascript
JavaScript监听键盘事件代码实现
Jun 03 Javascript
JavaScript实现班级抽签小程序
May 19 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页面缓存ob系列函数介绍
2012/10/18 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
护士辞职信范文
2014/01/19 职场文书
就业协议书的作用
2014/04/11 职场文书
服务标语大全
2014/06/18 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL