nodejs下载网络资源的三种方法写入数据
2016-09-20 21:57
260 查看
//三种方法来保存网络资源文件 http.get(options, function(res) { //直接使用Buffer的concat来进行连接,合并Buffer之后一次性写入 var buffer = new Buffer(0); //使用字符串来进行读写,这里特别要注意的事情就是编码,特别需要注意的是 //如果数据是二进制流的话,请一定使用ascii来统一Buffer和String之间的转换 var buffer2 =''; //使用文件句柄来分段写入Buffer,操作时间长,如果文件不大的话 //最佳的方案是把缓存收集在一起(第一种或第二种),然后进行异步写入到文件 var fd = fs.openSync('zngril.jpg', 'w'); //如果资源是二进制的,直接使用字符串来收集所有的chunk,然后 //将chunk写入到文件中是会错误的,因为chunk是Buffer类型,默认转换为String //是utf-8的编码,因为是二进制数据,所有有的数据可能不一定能转换成功 //如果将数据解释失败,则会导致内存缓存块大小不一样而导致文件保存错误. //二进制的话,始终用ascii来作为中间编码格式来进行转换,因为ascii是8位的 //Buffer也是Int8Array,所以按照单个字节是肯定不会出错的。 //使用方法首先收集Buffer //str_buffer += chunk.toString('ascii'); //fs.writeFileSync(filename, Buffer.from(str_buffer,'ascii')); //或者异步写入fs.writeFile(filename, Buffer.from(str_buffer,'asciii'), function(err){}); //**************************************************************************** //如果下载资源是文本,有特定的编码格式,则可以直接使用正确的编码来进行解释处理 res.on('data', function(chunk){ buffer2 += chunk.toString('ascii'); fs.writeSync(fd, chunk, 0, chunk.length); buffer = Buffer.concat([buffer,chunk]); }); res.on('end', function(){ console.log('Data receive complete.'); fs.closeSync(fd); var buf2 = Buffer.from(buffer2,'ascii'); console.log(Buffer.compare(buffer, buf2)); console.log('buffer_size ' + buffer.length); console.log('buf2_size ' + buf2.length); fs.writeFileSync('zngril_buffer.jpg', buffer); fs.writeFileSync('zngril_buffer2.jpg', buf2); }); });
相关文章推荐
- [转]DataTable的数据批量写入数据库三种方法比较
- iPhone开发下载网络数据的几种方法总结
- DataTable数据批量写入数据库三种方法比较
- android下载问题。本地与网络资源大小不一致解决方法
- 一种大规模网络流式数据缓存写入的方法
- 下载网络数据 以及另一种开线程的方法
- 网络数据传输的三种校验方法
- iPhone开发下载网络数据的几种方法总结
- 四种方法下载网络文本数据到本地内存
- 网络数据传输的三种校验方法
- DataTable数据批量写入数据库三种方法比较 以及方法介绍
- ios开发之网络数据的下载与上传 要实现网络数据的下载与上传,主要有三种方式
- iPhone开发下载网络数据的几种方法总结
- 网络数据获取三种方法对比:HUB、SPAN和TAP
- Python下载网络文本数据到本地内存的四种实现方法示例
- 网络数据传送的三种方法
- 三种向文件写入CString数据的方法
- 一种大规模网络流式数据缓存写入的方法
- 下载网络资源方法-java版
- 网络传输中,对Json组织方式的数据的解析以及使用这个方法,模拟从服务器端下载数据