nodejs下载网络资源的三种方法写入数据

//三种方法来保存网络资源文件
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);
   });
});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值