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 相关文章推荐
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
Dec 04 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 Javascript
JavaScript异步加载浅析
Dec 28 Javascript
jQuery中unbind()方法用法实例
Jan 19 Javascript
jQuery实现首页顶部可伸缩广告特效代码
Apr 15 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
vue+elementUI动态生成面包屑导航教程
Nov 04 Javascript
JavaScript原型继承和原型链原理详解
Feb 04 Javascript
详解Vue3中对VDOM的改进
Apr 23 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python实现快速多线程ping的方法
2015/07/15 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
python3中for循环踩过的坑记录
2020/12/14 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
德国网上宠物店:Zoobio
2018/05/23 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
小学生评语集锦
2014/04/18 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
五好家庭事迹材料
2014/12/20 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python