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命令# ...
一周排行
  • NodeJSHelloWorld起步教程
    概述: 做数据,免不了需要展示数据,数据可视化是必须经历的步骤. 本文将提供一个NodeJ ...
  • 今天做了一个360度的全景照片,其中要注意以下几个问题: 1:如何在拖图片时,使其加载变快?---注意让图片隐藏的性能比让图片切换的性能高,且在IE9下运行,会出现图片加载的问题1:如何使图片带有一定的速度转1:考虑 ...
  • phpcms如何添加顶踩功能步骤: 1.在后台模型增加两个字段,一个goodpost,一个badpost;这个步骤简单,按后台新增加字段下一步就行了. 2.在模块/phpcms/modules/content/增加扩 ...
  • 1.安装redis 首页地址:http://redis.io/ 下载地址:http://download.redis.io/ 下载最新的源码包(当前最新稳定版2.6.16)wget http://download.r ...
  •  Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境.log4j. ...
  • 1.关于修改solaris10内核参数问题..错误ORA-27102 "Out of Memory"   ..之前在HP-UX和AIX系统上,安装oracle时,都有提到过修改OS内核参数的问题. ...
  • 一个Java算法问题求解 目前,在做一个东西,遇到了一个算法问题,总感觉没找到最优算法. 问题:已知两个集合A.B,其中B集合是通过A集合经过删除.修改.添加操作后所得结果,求B相对A的变化情况(添加了.删除了哪些元 ...
  • 7.C语言光线成像(一)诡异的笑世界上的很多道理,没有亲身经历过,是不会有太大感触的.比如“少壮不努力,老大徒伤悲”,这句话从小时就耳熟能详,可是从小真正能理解的又有几人?大多数少壮之人都是随波逐流,直到进入大学才后 ...
  •   vpn监控脚本在adsl拔号上网的内部代理上网服务器上配置VPN服务器,也为了方便在外部接入.但adsl拔号上网的IP是经常变的,配置用IP连接VPN很容易失效了,但可以通过定义下脚本来检测,在IP发生变化时VP ...
  • Eclipse中拷贝J2EE项目,发布到tomcat中名字一样的解决办法转至:http://kevinloci.iteye.com/blog/607989修改Eclipse工作空间下新拷贝项目下.settings文件 ...