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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
javascript 简练的几个函数
Aug 29 Javascript
js实现带按钮的上下滚动效果
May 12 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
Node.js学习之地址解析模块URL的使用详解
Sep 28 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
Mar 08 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
JavaScript中的LHS和RHS分析详情
Apr 06 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文件注释标记及规范小结
2012/04/01 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python实现配置文件备份的方法
2015/07/30 Python
Django内容增加富文本功能的实例
2017/10/17 Python
详解用python写一个抽奖程序
2019/05/10 Python
学习和使用python的13个理由
2019/07/30 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python模块future用法原理详解
2020/01/20 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
资深财务管理人员自我评价
2013/09/22 职场文书
销售简历自我评价
2014/01/24 职场文书
迟到检讨书5000字
2014/01/31 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
公司禁烟通知
2015/04/23 职场文书
元旦晚会开场白
2015/05/29 职场文书
MySQL系列之二 多实例配置
2021/07/02 MySQL