Tag: stream

获取stream的内容长度

在我的node.js应用程序中,我使用gm(graphicsmagick包装器)和aws2js(亚马逊cli包装器) 。 问题是,亚马逊需要知道内容的长度,以便我可以把stream在S3上。 我正在将图像上传到我的应用程序,通过创build一个stream来读取该文件: var fileStream=fs.createReadStream(file.path) 我把这个文件传给gm,调整它的大小,然后告诉它来传输这个文件。 然后我想把这个stream到aws: gm( fileStream, "some.png" ). identify({bufferStream: true}, function(err, info) { this.stream("png", function (err, stdout, stderr) { if (err){console.log(err);cb(err);return;} aws.S3.putStream(path, stdout, 'public-read', {'content-length': ?????, 'content-type': 'image/png'}, function (err, result) { ….. } }); }); }); 问题是,亚马逊需要知道内容长度(它不是库)来放置stream。 AWS不支持分块stream。 有谁知道我怎么能确定一个stream的内容长度? 或者唯一的解决办法是将tmp写入磁盘,以stream的forms读取文件,然后将其与temp文件的内容长度一起放到amazon中?

写入产生的进程stdin nodejs?

我有一个脚本,我想从另一个运行。 问题在于子脚本(进程)在继续之前需要用户input。 var child = spawn('script'); child.stdin.setEncoding('utf8'); child.stdout.on('data', function (data) { console.log(data.toString().trim()); // tells me to input my data child.stdin.write('my data\n'); }); input我的数据后,子脚本应该继续,而是挂在那里。 解 其实上面的代码适合我。 我在子脚本中使用commander.js来提示用户采取行动。 以下是我如何回应小孩的脚本提示: child.stdout.on('data', function (data) { switch (data.toString().trim()) { case 'Username:': child.stdin.write('user'); break; case 'Password:': child.stdin.write('pass'); break; } }); 同样的事情与假设 : var suppose = require('suppose'); suppose('script') .on('Username: ').respond('user') .on('Password: ').respond('pass') […]

使用aws-sdk将svresize的图像上传到s3

所以我想要做的是从一个URLstream图像,处理它与graphicsmagick和stream上传到S3。 我只是没有得到它的工作。 将处理后的图像stream式传输到本地磁盘(使用fs.createWriteStream)可以毫无问题地工作。 当我缓冲我的stream,s3中的最终图像至less有预期的大小(kb方式),但我无法打开该图像。 那是我目前的进展: var request = require('request'); var gm = require("gm"); var AWS = require('aws-sdk'); var mime = require('mime'); var s3 = new AWS.S3(); gm(request('http://www.some-domain.com/some-image.jpg'), "my-image.jpg") .resize("100^", "100^") .stream(function(err, stdout, stderr) { var str = ''; stdout.on('data', function(data) { str += data; }); stdout.on('end', function(data) { var data = { Bucket: "my-bucket", Key: […]

node.js写入http响应stream

我通过http获取一些二进制数据。 我的代码如下所示: var writeStream = fs.createWriteStream(fileName); request(url, function(err, res) { res.socket.pipe(writeStream); }); 现在输出文件被创build,但文件大小为0. url是正确的,但我用wgetvalidation。 在此先感谢和最好的问候

与node.js中的fs.createWriteStream关联的事件

在写入stream时遇到EOF时会触发什么事件? 我的代码如下。 它是根据http://docs.nodejitsu.com/articles/advanced/streams/how-to-use-fs-create-write-stream 但令人惊讶的是,我的“终结”事件从未被解雇。 当我检查http://nodejs.org/api/stream.html#stream_event_end ,我看到可写入的stream没有任何事件'结束' var x = a1.jpg; var options1 = {'url': url_of_an_image, 'encoding': null}; var r = request(options1).pipe(fs.createWriteStream('/tmp/imageresize/'+x)); r.on('end', function(){ console.log('file downloaded to ', '/tmp/imageresize/'+x); } 如何捕获EOF事件?

在string中创build一个文本文件在node.js中,并作为响应进行stream式处理

1)我正在使用express.js 2)我有一个string“Hello world!” 3)我想要一个用户点击 <a href=/download>Download</a> 4)用户应该得到Hello.txt下载的文本,而不是打开一个标签的文字。 5)我已经四处寻找方法来实现这一点,我猜测它与创buildreadstreams从缓冲区和pipe道到响应有关,但我大多数的例子处理从磁盘读取实际的文件,我不想读取磁盘,我只是想用一个string创build的文件作出回应。 谢谢!

parsingstream在Nodejs中的对象

我正在尝试从 Node.Js中的Amazon S3存储获取对象。 当我将它保存到一个文件时 ,这完美的工作。 amazon.getObject = function () { var options = { BucketName : 'mybucket', ObjectName : 'path/to/my.json', ResponseContentType : 'application/json' }; s3.GetObject(options, function(err, data) { var fs = require('fs'); var fd = fs.openSync('helloaa.json', 'w+'); fs.writeSync(fd, data.Body, 0, data.Body.length, 0); fs.closeSync(fd); }); }; 在。 helloaa.json是: { "hello": 1, "world": 3 } 但。 我不想将数据写入磁盘上的文件。 […]

使用NodeJs在内存中caching整个文件

我有一个相当小的文件(大约几百千字节),我想要在内存中直接访问整个代码的执行。 我不清楚NodeJ的内部,所以我问fs open是否足够,或者我必须读取所有文件并复制到一个Buffer ?

如何正确删除节点js eventemitter中的事件监听器

我有一个GET和POST路由的设置,这个想法是发送到路由触发一个事件,GET路由是一个服务器发送的事件stream,触发每次POSTed事件触发…但是,我认为我做了错误的事情,事件监听器似乎得到例行的添加,尽pipe只有一个事件stream用户…我做错了什么? var events = require('events'), EventEmitter = events.EventEmitter, rr = new EventEmitter(); app.post('/api/:boardname/remoterefresh', function(req, res){ var boardname = req.param('boardname'), data = new Date().getTime(); rr.emit("refresh-"+boardname, data) res.json({data: data}) }); app.get('/api/:boardname/remoterefresh', function(req, res){ var boardname = req.param('boardname') rr.on("refresh-"+boardname, function(data){ setTimeout(function(){ res.write('data: '+data+'\n\n'); }, 1000) }); req.socket.setTimeout(Infinity); res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); res.write('\n'); req.on('close', […]

如何读取node.js中的整个文本stream?

在RingoJS中有一个叫做read的函数 ,它允许你读完整个stream,直到到达结尾。 在制作命令行应用程序时,这非常有用。 例如,你可以写一个tac 程序如下: #!/usr/bin/env ringo var string = system.stdin.read(); // read the entire input stream var lines = string.split("\n"); // split the lines lines.reverse(); // reverse the lines var reversed = lines.join("\n"); // join the reversed lines system.stdout.write(reversed); // write the reversed lines 这可以让你启动一个shell并运行tac命令。 然后input你想要的行数,完成后你可以按下Ctrl + D (或Windows上的Ctrl + Z )来表示传输结束 。 我想在node.js做同样的事情,但我找不到任何function。 […]