标签: node.js-stream

节点fs.readstream()输出<Buffer 3c 3f 78 6d 6c ...>而不是可读数据

我在Node Js中读取一个大型XML文件(~1.5gb).我正在尝试对其进行流式处理并使用大量数据执行某些操作,但我发现很难理解文档.

我目前的简单代码是:

var fs = require('fs');

var stream = fs.createReadStream('xml/bigxmlfile.xml');

stream.on('data', function(chunk){ 
    console.log(chunk)
});
Run Code Online (Sandbox Code Playgroud)

控制台提供了一堆buffer十六进制(我认为)代码,如下所示:

<Buffer 65 61 6e 2d 63 75 74 20 67 72 69 64 20 6c 69 6e 65 73 20 74 68 65 20 73 70 72 65 61 64 20 63 6f 6c 6c 61 72 20 61 6e 64 20 6d 69 74 65 72 65 64 2c 20 74 ...>
<Buffer 65 79 77 6f 72 64 73 3e …
Run Code Online (Sandbox Code Playgroud)

javascript hex stream node.js node.js-stream

4
推荐指数
1
解决办法
3151
查看次数

node.js http.IncomingMessage不会触发'close'事件

http.IncomingMessage何时触发其"关闭"事件?

根据文档,它应该在底层连接关闭时发生.但是,它永远不会被调用以下示例代码(我确保它不是由keep-alive引起的):

var http = require('http'),
    fs = require('fs');

var server = http.createServer(function(req, res) {
    res.shouldKeepAlive = false;
    req.on("end", function() {
        console.log("request end");
    });
    req.on("close", function() {
        console.log("request close");    // Never called
    });
    res.end("Close connection");
});
server.listen(5555);
Run Code Online (Sandbox Code Playgroud)

我正在使用node.js v0.10.22.

node.js node.js-stream

3
推荐指数
1
解决办法
1126
查看次数

NodeJS parseStream,定义块的起点和终点

由Node的文件系统解析混淆.这是我的代码:

var fs = require('fs'),
    xml2js = require('xml2js');

var parser = new xml2js.Parser();

var stream = fs.createReadStream('xml/bigXML.xml');
stream.setEncoding('utf8');

stream.on('data', function(chunk){ 

    parser.parseString(chunk, function (err, result) {
        console.dir(result);
        console.log('Done');
    });
});


stream.on('end', function(chunk){
    // file have been read over,do something...
    console.log("IT'S OVER")
});
Run Code Online (Sandbox Code Playgroud)

这导致......没有任何事情发生.根本没有来自XML2JS /解析器的输出.当我尝试console.log(chunk)它似乎chunks没有输出任何类型的有意义的块基于除字节大小以外的任何东西.一个'块'的输出是:

<?xml version="1.0" encoding="UTF-8"?>
    <merchandiser xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="merchandiser.xsd">
    <header><merchantId>1237</merchantId><merchantName>NORDSTROM.com</merchantName><createdOn>12/13/2013 23:50:57</createdOn></header>
    <product product_id="52863929">// product info</product>
    <product product_id="26537849">// product info</product>
    <product product_id="25535647">// product info</product>
Run Code Online (Sandbox Code Playgroud)

这个块里面有很多很多<product>来自XML 的条目.块将在<product>条目中间的某处结束,下一个块将从此处停止的位置开始.

主要问题是如何createReadStream从输出<product结束处开始输出块</product> …

javascript xml node.js node.js-stream

3
推荐指数
1
解决办法
3090
查看次数

Node.js - 错误:编写 EPIPE 代码:'EPIPE

我在标准输入流上不断收到 EPIPE 错误,但找不到原因:

这是我的代码:

var checkFile = function(data, callback){
   var child_process = spawn('ffprobe', ['-print_format', 'json', '-show_format', 'pipe:0']);

   var stdInError = function(e) {
       console.log(e);
   }
   child_process.stdin.on('error', stdInError);

   var generalError = function() {
       console.log("general Error" + "\n");
   }
   child_process.on('error', generalError);

   child_process.stdout.on('data', function(data){
        console.log("data" + "\n");
        console.log(data);
        console.log("\n");
   });

   child_process.on('close', function(){
       console.log("close" + "\n");
   }

   var exit = function(){
       console.log("exit");
   }
   child_process.on('exit', exit);

   console.log("write" + "\n");
   child_process.stdin.write(data);
   child_process.stdin.end();
};
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

write

data

<Buffer 7b 0a 20 20 20 20 22 66 6f 72 …
Run Code Online (Sandbox Code Playgroud)

node.js ffprobe node.js-stream

2
推荐指数
1
解决办法
1万
查看次数

S3的解压缩文件失败,不确定原因

(下面的新信息)我正在尝试设置一个lambda函数,通过解压缩并将结果写回S3,对上传的tgz文件作出反应.解压缩和解压缩工作正常,但上传到S3失败:

/Users/russell/lambda/gzip/node_modules/aws-sdk/lib/s3/managed_upload.js:350
    var buf = self.body.read(self.partSize - self.partBuffer.length) ||
                        ^
TypeError: undefined is not a function
    at ManagedUpload.fillStream (/Users/russell/lambda/gzip/node_modules/aws-sdk/lib/s3/managed_upload.js:350:25)
    at Entry.<anonymous> (/Users/russell/lambda/gzip/node_modules/aws-sdk/lib/s3/managed_upload.js:167:28)
    at Entry.emit (events.js:104:17)
    at Entry._read (/Users/russell/lambda/gzip/node_modules/tar/lib/entry.js:123:12)
    at Entry.end (/Users/russell/lambda/gzip/node_modules/tar/lib/entry.js:82:8)
    at Parse._process (/Users/russell/lambda/gzip/node_modules/tar/lib/parse.js:107:13)
    at BlockStream.<anonymous> (/Users/russell/lambda/gzip/node_modules/tar/lib/parse.js:47:8)
    at BlockStream.emit (events.js:107:17)
    at BlockStream._emitChunk (/Users/russell/lambda/gzip/node_modules/tar/node_modules/block-stream/block-stream.js:145:10)
    at BlockStream.write (/Users/russell/lambda/gzip/node_modules/tar/node_modules/block-stream/block-stream.js:45:10)
Run Code Online (Sandbox Code Playgroud)

当我写入S3时会发生此错误,但如果我将文件本地写入磁盘则可以正常工作,因此管道是正确的.

以下是演示此问题的代码:

var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var zlib = require('zlib');
var tar = require('tar');
var fstream = require('fstream');

fstream.Reader({'path': 'testdata.tar.gz'})
    .pipe(zlib.Unzip())
    .pipe(tar.Parse())
    .on('entry', function(entry) {
        var filename = …
Run Code Online (Sandbox Code Playgroud)

tar amazon-s3 node.js node.js-stream aws-sdk

2
推荐指数
1
解决办法
2487
查看次数

如何使用Node.js检测客户端Internet断开连接

我正在使用node.js作为游戏服务器.

这是我的服务器脚本

 var net = require('net');
 var http = require('http');

var host =  '192.168.1.77';
var portNum = 12345;//


  function policy() 
{
    var xml = '<?xml version="1.0"?>\n<!DOCTYPE cross-domain-policy SYSTEM' +
            '"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">\n<cross-domain-policy>\n';

    xml += '<allow-access-from domain="*" to-ports="*"/>\n';
    xml += '</cross-domain-policy>\n\0' + "\0";
    return xml;
}



var server = net.createServer(function (stream) 
{
stream.setEncoding('utf8');

stream.on('data', function (data) { 

    if (data == '<policy-file-request/>\0') 
    {
        var x = policy();
        stream.write(x);
        var server_date = new Date();
        var serv_sec = server_date.getSeconds();
        return;
    }

    var comm = JSON.parse(data); 
    if …
Run Code Online (Sandbox Code Playgroud)

disconnect node.js node.js-stream

0
推荐指数
1
解决办法
3844
查看次数

如何将图像写入具有缓冲区的服务器?

在 Expressjs 中,我上传了一张图片。它是一个缓冲区编码 7 位:

 { fieldname: 'file',
  originalname: 'img.JPG',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  buffer: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 64 00 64 00 00 ff db 00 43 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0
1 01 01 01 01 01 ... >,
  size: 873066 }
Run Code Online (Sandbox Code Playgroud)

如何将其作为图像保存到文件系统?保存了一些东西,但它不是图像:

Windows 照片查看器无法打开此图片,因为该文件似乎已损坏、损坏过大。

这些不起作用:

fs.writeFile('uploaded-img.jpg', req.file, 'ascii', function(err) …
Run Code Online (Sandbox Code Playgroud)

buffer node.js node.js-stream

0
推荐指数
1
解决办法
1177
查看次数