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命令# ...
一周排行
  • 业务分析模型可能有以下属性:简介:文本描述,作为模型的简要简介.业务系统:模型中的组件,表示层次结构.业务工作者:模型中的业务工作者类,为业务系统所有.业务实体:模型中的业务实体类,为业务系统所有.业务事件:模型中的 ...
  • 国外干货6个方法助你设计出优秀的APP
    伟大的设计来源于一致性和细致化,而其实只要有足够的纪律,每个团队都可以实现这一点. 品牌( ...
  • 1.简介:敏捷项目管理在我们国家起步比较晚,成功运用的项目不多百分之六十五的敏捷项目用户为scrum 2.互联网时代的特征,雷军的话:专注,极致,口碑,快(敏捷项目开发就是要快速) 3.敏捷开发各门派 4.敏捷的四大 ...
  • 650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this ...
  • 免费下载如何做好知识管理规划PDF文档
    年终岁尾,准备实施和已经正在实施知识管理的企业,都需要做知识管理的全面和年度规划. KMC ...
  • 一.安装与配置cobbler:1.导入epel源:由于互联网上的6.5版本已经没有办法下载了,我用的最新版本:epel-release-.noarch.rpm       # rpm -ivh epel-rel ...
  • 今天在pub上看到网友的一个关于union all中order by 子句使用的问题.这个问题才我刚开始写sql语句的时候也有这个疑问,后来终于弄明白,再次看到,本人就总结一下,以便其它网友查阅:其实在union a ...
  • 平安城市发展趋势分析公安部于2004年开始进行3111工程试点建设,至今历时11年,以技防监控为标志的平安城市建设现已取得重大突破与成就.据统计,截至2014年,全国公安已自建摄像机约100多万台,实现了全国三分之二 ...
  • 通过SAN(SubjectAlternativeName)实现证书的多域名安全访问
    在为vShield Manager创建安全证书时需要实现计算机名.完全合格域名.及IP地址 ...
  • 一.移动二.搜索三.替换