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-TreeView父子联动效果保持节点状态一致
Aug 12 Javascript
JavaScript学习历程和心得小结
Aug 16 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
jQuery 全选 全部选 反选 实现代码
Aug 17 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
Javascript 普通函数和构造函数的区别
Nov 05 Javascript
angularjs实现下拉列表的选中事件示例
Mar 03 Javascript
vue的常用组件操作方法应用分析
Apr 13 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
node中IO以及定时器优先级详解
May 10 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如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python注释详解
2016/06/01 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
少先队入队活动方案
2014/02/08 职场文书
教师开学感言
2014/02/14 职场文书
合作意向书格式及范文
2014/03/31 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
团拜会策划方案
2014/06/07 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
任命书标准格式
2015/03/02 职场文书
大学生入党自荐书
2015/03/05 职场文书
班级班风口号大全
2015/12/25 职场文书
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis