node.js文件上传处理示例

 更新时间:2016年10月27日 14:06:50   作者:cclehui  
这篇文章主要介绍了node.js文件上传处理的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下。

直入主题,在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); 
  }); 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于node.js实现爬虫的讲解

    基于node.js实现爬虫的讲解

    今天小编就为大家分享一篇关于基于node.js实现爬虫的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • npm ERR! code ELIFECYCLE错误及解决方法

    npm ERR! code ELIFECYCLE错误及解决方法

    有时候在使用npm运行命令时,可能会遇到错误,本文主要介绍了npm ERR! code ELIFECYCLE错误及解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • node.js学习之交互式解释器REPL详解

    node.js学习之交互式解释器REPL详解

    Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。下面这篇文章我们就来详细的介绍下关于node.js交互式解释器REPL的内容,有需要的朋友们可以参考借鉴。
    2016-12-12
  • 利用pm2部署多个node.js项目的配置教程

    利用pm2部署多个node.js项目的配置教程

    目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种,而下面这篇文章主要给大家介绍了关于利用pm2部署多个node.js项目的配置教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • node.js自动上传ftp的脚本分享

    node.js自动上传ftp的脚本分享

    这篇文章主要给大家介绍了一个关于node.js自动上传ftp脚本的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-06-06
  • 利用yarn代替npm管理前端项目模块依赖的方法详解

    利用yarn代替npm管理前端项目模块依赖的方法详解

    这篇文章主要给大家介绍了关于利用yarn代替npm管理前端项目模块依赖的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 监控Nodejs的性能实例代码

    监控Nodejs的性能实例代码

    这篇文章主要介绍了监控Nodejs的性能实例代码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 对node.js中render和send的用法详解

    对node.js中render和send的用法详解

    今天小编就为大家分享一篇对node.js中render和send的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Node.js重新刷新session过期时间的方法

    Node.js重新刷新session过期时间的方法

    在Node.js中,我们通常使用express-session这个包来使用和管理session,保存服务端和客户端浏览器之间的会话状态。那如何才能实现当用户刷新当前页面或者点击页面上的按钮时重新刷新session的过期时间呢,接下来通过本文一起学习吧
    2016-02-02
  • 基于node实现websocket协议

    基于node实现websocket协议

    这篇文章主要介绍了基于node实现websocket协议的相关资料,需要的朋友可以参考下
    2016-04-04

最新评论