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命令# ...
一周排行
  • Android切近实战(三)
    上一篇,我们看了用户注册,本片我们来看一下系统参数管理,C#版本的界面如下,我记得我在ja ...
  • cacti的安装与注意事项
    cacti的介绍:    Cacti是一套基于PHP,MySQL,SNMP及RRDTool ...
  •     本来在18号写这个续篇来着,让人郁闷的是很有感觉的码了一大堆文字,结果不小心把浏览器关掉了-当时那叫一个崩溃啊!这场惨剧的发生,足可见备份是多么的重要.闲话不表,咱们书接前文.上回书说到小松跑出去溜达了一圈, ...
  • sed行处理详解(交换行,合并行,删除行将文本中的三行合并成一行sed方法:sed 'N;N;s/\n/ /g'  test 说明:N 追加下一个输入行到模式空间,用了两次把当前行的后两行都追加到了模式空间,即多行模 ...
  • 问题:关于域帐户将计算机加入域登陆上限问题解决方法:adsiedt.msc或者脚本当您尝试从 Windows NT 4.0 Workstation 或 Windows NT 4.0 Server 计算机加入 Wind ...
  • 已经不记得什么时候第一次来南京,对南京的印象还不错.刚开始是住金陵饭店,后来找到了个新家:丁山香格里拉饭店.总觉得香格里拉的服务很标准,很多人性化的服务让人很愉快. 不记得从去年什么时候,发觉香格里拉饭店已经悄无声息 ...
  • php解析一个url
    $url = "http://shopnc.localhost/shop/ind ...
  • 远程访问服务适用的环境是:各地的分公司或出差的员工需要访问总部网络的资源.Windows Server2008远程服务提供了两种远程访问连接方式.(1)拨号网络:拨号客户端需要安装Modem,使用拨号连接拨打远程访问 ...
  • Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to show spo ...
  • 声明一个类(SKYCommon)为单例,通常的做法是:1.声明一个全局的静态对象:static SKYCommon *skyObject;2.实现两个类方法:+ (SKYCommon *)sharedCommon { ...