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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
JS中数组Array的用法示例介绍
Feb 20 Javascript
js获得网页背景色和字体色的方法
Mar 21 Javascript
table行随鼠标移动变色示例
May 07 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 Javascript
Vue数据驱动模拟实现4
Jan 12 Javascript
vue实现登陆登出的实现示例
Sep 15 Javascript
如何在JavaScript中优雅的提取循环内数据详解
Mar 04 Javascript
Vue函数式组件-你值得拥有
May 09 Javascript
浅谈vue 锚点指令v-anchor的使用
Nov 13 Javascript
JS highcharts实现动态曲线代码示例
Oct 16 Javascript
vue如何在data中引入图片的正确路径
Jun 05 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
php下连接mssql2005的代码
2011/01/17 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
python在协程中增加任务实例操作
2021/02/28 Python
大专生毕业的自我评价
2014/02/06 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
司法助理专业自荐书
2014/06/13 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
大学生实习推荐信
2015/03/27 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
工商行政处罚决定书
2015/06/24 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
如何在C++中调用Python
2021/05/21 Python
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
git stash(储藏)的用法总结
2022/06/25 Servers