Node.js写文件的三种方法

Node.js写文件的三种方式:

1、通过管道流写文件

采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐)

 2  var readStream = fs.createReadStream(decodeURIComponent(root + filepath.pathname)); // 必须解码url
 3  readStream.pipe(res); // 管道传输
 4  res.writeHead(200,{
 5      'Content-Type' : contType
 6  });
 7 
 8  // 出错处理
 9  readStream.on('error', function() {
10      res.writeHead(404,'can not find this page',{
11          'Content-Type' : 'text/html'
12      });
13      readStream.pause();
14      res.end('404 can not find this page');
15      console.log('error in writing or reading ');
16  });

2、手动管理流写入

手动管理流,适合大小文件的处理

 1 var readStream = fs.createReadStream(decodeURIComponent(root + filepath.pathname));
 2  res.writeHead(200,{
 3      'Content-Type' : contType
 4  });
 5 
 6  // 当有数据可读时,触发该函数,chunk为所读取到的块
 7  readStream.on('data',function(chunk) {
 8      res.write(chunk);
 9  });
10 
11  // 出错时的处理
12  readStream.on('error', function() {
13      res.writeHead(404,'can not find this page',{
14          'Content-Type' : 'text/html'
15      });
16      readStream.pause();
17      res.end('404 can not find this page');
18      console.log('error in writing or reading ');
19  });
20 
21  // 数据读取完毕
22  readStream.on('end',function() {
23      res.end();
24  });

3、通过一次性读完数据写入

一次性读取完文件所有内容,适合小文件(不推荐)

 1 fs.readFile(decodeURIComponent(root + filepath.pathname), function(err, data) {
 2      if(err) {
 3          res.writeHead(404,'can not find this page',{
 4              'Content-Type' : 'text/html'
 5          });
 6          res.write('404 can not find this page');
 7 
 8      }else {
 9          res.writeHead(200,{
10              'Content-Type' : contType
11          });
12          res.write(data);
13      }
14      res.end();
15  });
更多相关文章
  • JS判断数据类型的三种方法
    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Function,Array,Date,... 很多时候我们都需要通过判断变量的数据类型来进行 ...
  •    第一种 采用NETBIOS协议.在linux安装了samba .  smbmount //IP/sharename  / mount point     NETBIOS 毕竟稳定性不够.有时候会挂载不上.还需要特别注意打开windows 的guest 用户.并需要设置密码. 对访问权限的设置也 ...
  •   Technical Q&A QA1914 Viewing the interface of your Swift code Q:  How do I view the interface of my Swift code in Xcode? 问: 怎么在Xcode中查看swift文件的头 ...
  • import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; /** * 复制文件 * @autho ...
  • 生成EXCEL文件是经常需要用到的功能,我们利用一些开源库可以很容易实现这个功能. 方法一:利用excellibrary,http://code.google.com/p/excellibrary/ excellibrary是国人写的开源组件,很容易使用,可惜貌似还不支持.xlsx(Excel 20 ...
  • 原文连接: http://www.cnblogs.com/xieduo/articles/606202.html 一.文件保存在服务器,提供下载 ).ToString()+".csv";FileStream fs=new FileStream(name,FileMode.Crea ...
  • 方法一: 代码如下: f = open("foo.txt")             # 返回一个文件对象  line = f.readline()             # 调用文件的 readline()方法  while line:      print line,    ...
  • 将linux文件中的tab更换为空格的三种方法1,用sed命令#sed 's/\t/ /g' filename >filename12,  用tr命令#cat filename|tr  "\t" " " >filename23,用col -x命令# ...
一周排行
  • 我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF.Asp.Net MVC.AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.Net.WinForm.还应该有着牢固的计算机基础知识,比 ...
  • 服务器错误码 AS Error Code Number CAS Error Code Error Message Note -1000 CAS_ER_DBMS "CUBRID DBMS Error" ...
  • Windows 7的一大特色便是引入了"超级任务栏",除了各种炫目的Aero特效外,一个很明显的改进就是尺寸增大了(应该说"宽度"更精确).正是有了这个"物质基础&q ...
  • libgdx游戏引擎开发笔记十二SuperJumper游戏例子的讲解篇六----.游戏主人公创建以及碰撞检测
       看了前面的几讲,相信大家都已经对这款游戏有了一定的了解,今天我们就来完成最后的工作: ...
  •         幸福是什么,我想谁也无法去定义.幸福这只是人的一种感受,而不是其它什么实实在在的东西.幸福不是你拥有房子.名车.地位.金钱等等一切物质你就一定感到幸福了.幸福纯属人的感觉.       怎么才使人感到 ...
  •  第一步:下载JDK 1.6以上的版本,进行环境变量配置安装,大家都懂的. 第二部:从官网http://www.cloudbus.org/cloudsim/下载cloudsim压缩包,目前最高版本是CloudSim ...
  • 系统都是6.3 32位Vip:192.168.2.244Lvs-master:192.168.2.80Lvs-backup:192.168.2.6Web92.168.2.93Web92.168.2.64 ...
  • 嘿嘿,今天在论坛里看了一篇帖子,讨论ltrim() 函数的详细用法,下面我借几个高手的回答总结一下:先看几个实例:SQL> select ltrim('109224323','109') from dual;L ...
  • 可拖动的DIV续
    之前写过一篇可拖动的DIV讲如何实现可拖动的元素,最后提出了几点不足,这篇文章主要就是回答 ...
  • 这篇TT安全发表的译文讲到了在Gartner的2012年安全和风险管理峰会上Neil MacDonald对于BDA的一些观点.这些观点是他对于BDA的一系列看法的一部分,例如他早前发布的一份研究报告:Informat ...