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 相关文章推荐
超清晰的document对象详解
Feb 27 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
Apr 21 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
Sep 18 Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 Javascript
Vue图片裁剪组件实例代码
Jul 02 Vue.js
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
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
js中replace的用法总结
2013/12/27 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
英国现代绅士品牌:Hackett
2017/12/17 全球购物
Unix如何在一行中运行多个命令
2015/05/29 面试题
学校介绍信范文
2014/01/14 职场文书
面试后的感谢信范文
2014/02/01 职场文书
党员公开承诺书
2014/03/25 职场文书
环境卫生标语
2014/06/09 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
教师党员自我评价2015
2015/03/04 职场文书
太行山上观后感
2015/06/05 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers