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 相关文章推荐
优化Jquery,提升网页加载速度
Nov 14 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
JS限制文本框只能输入数字和字母方法
Feb 28 Javascript
详解Vue2 无限级分类(添加,删除,修改)
Mar 07 Javascript
基于bootstrap页面渲染的问题解决方法
Aug 09 Javascript
使用vue-cli webpack 快速搭建项目的代码
Nov 21 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
May 17 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
Oct 17 Javascript
在vue和element-ui的table中实现分页复选功能
Dec 04 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
JS写滑稽笑脸运动效果
May 28 Javascript
node+vue实现文件上传功能
May 28 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
数据库的日期格式转换
2006/10/09 PHP
新闻分类录入、显示系统
2006/10/09 PHP
收集的PHP中与数组相关的函数
2007/03/22 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
javascript代码加载优化方法
2011/01/30 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
python访问类中docstring注释的实现方法
2015/05/04 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
医学专业毕业生个人的求职信
2013/12/04 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
运动会广播稿150字
2014/02/19 职场文书
市场营销方案范文
2014/03/11 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL