我正在使用ReadLine逐行读取一个非常大的文件,以便能够检测到可以将其分割成多个有意义片段的地方。 我使用WriteStream来写入这些文件。 当正则expression式检测到剪切的地方时,我结束()当前打开的WriteStream并为刚刚读取的行打开一个新的。 问题是,所有这些文件最终被截断,就好像end()调用没有完成它的工作。 我检查了write()的成功并在缓冲区满时暂停inputstream。 这是我的代码的相关部分: var rl = readline.createInterface({ input: fs.createReadStream('basesystem.js',{encoding:'utf8'}), output: process.stdout }); rl.on('line', function (line) { var match = rexp.exec(line); if (match) { out.end(); console.log(path.join(PATH, match[2],'.js')); out = fs.createWriteStream(path.join(PATH,match[2]) + '.js', {encoding:'utf8'}); } if (!out.write(line + '\n')) { console.log('***** paused **** '); rl.pause(); out.once('drain', function () { console.log('***** resume **** '); rl.resume(); […]
我正在构build一个处理图片上传的应用程序,当图片上传时,我想制作3张缩略图,并上传到Amazon S3。 现在我想知道是否有图书馆可以做到这一点,而图像上传,处理,并最终streamasynchronousstream。 解决这个问题的最好的逻辑方法是上传文件到服务器,一旦上传完成,创build3个缩略图,然后全部上传到Amazon S3并删除上传的文件。 但是我不希望任何磁盘I / O涉及,也没有存储。
我现在正在学习node.jsstream,因此我想编写自己的自定义stream模块。 这是我目前所拥有的: index.js: fs = require("fs") var module = require("./module") var ws = fs.createWriteStream("out.txt") fs.createReadStream("in.txt") .pipe(module()) .pipe(ws) module.js: var Stream = require('stream').Stream; module.exports = function() { var stream = new Stream(); this.writable = true; this.readable = true; stream.write = function(data) { console.log("write") stream.emit("data", data) } stream.end = function() { console.log("end") stream.emit("end") } stream.destroy = function() […]
我想将一个stream作为parameter passing给一个函数,并在asynchronouscallback中使用它,但它被销毁(stream.readable为false) 例如: var test = require('./test'); var file = fs.createReadStream('./file.txt'); test(file, console.log); 并在test.js中: module.exports = function(stream, callback) { //stream.pipe(process.stdout); ///////// STREAM IS READABLE HERE doSomething('abc', function(err) { stream.pipe(process.stdout); ///////// STREAM IS NOT READABLE HERE callback(err); }); }; enter code here 为什么会这样呢? 我能做些什么来callback?
所以,我从STDIN中得到一个带有换行符的文件stream,但是这个stream提供了换行符的缓冲区消失。 我将如何处理/parsingStream方法? util.inherits(Parser,Transform); Parser.prototype._transform = function(data,encoding,done){ 的console.log(data.toString()); this.push(this._parseRow(数据)); ()完成; }; //将数据行parsing为一个对象 Parser.prototype._parseRow = function(row){ var result = row.toString()。split(“\ r”); var fields = result.toString()。split(“;”); var bank = {a:fields [0],b:fields [1] .trim()}; 返回bank.toString(); }; 但输出有随机的换行符。
在NodeJS中,我是非常新的stream – 对于他们基本上毫无头绪 – 我试图让Amazon S3的KnoxJS客户端通过HTTP GETstream式传输文件。 Knox github页面上的示例代码显示了这一点: http.get('http://google.com/doodle.png', function(res){ var headers = { 'Content-Length': res.headers['content-length'] , 'Content-Type': res.headers['content-type'] }; client.putStream(res, '/doodle.png', headers, function(err, res){ // check `err`, then do `res.pipe(..)` or `res.resume()` or whatever. }); }); 但是,这是非常明显的不完整的……除了打开http.get和putStream for S3之外, 那么我从哪里去呢? 有人可以帮我完成这段代码,这样我就可以通过HTTP GET将文件stream式传输到S3上的存储桶中了吗?
我无法通过标准输出pipe道输出ffmpeg。 以下是我编码到目前为止的代码块。 var http = require('http') , fs = require('fs') var child_process = require("child_process") http.createServer(function (req, res) { console.log("Request:", dump_req(req) , "\n") // path of the var path = 'test-mp4.mp4' //test-mp4-long.mp4 , stat = fs.statSync(path) , total = stat.size var range = req.headers.range , parts = range.replace(/bytes=/, "").split("-") , partialstart = parts[0] , partialend = […]
我试图用节点js复制几个文件。 这是我想要做的一个例子: var request = require('request'); va photos [{ 'url': 'http://xxxx.com/im1', 'name' : 'name1' }, { 'url': 'http://xxxx.com/im12', 'name' : 'name2' }, for (var i = 0; i < photos.length; i++) { request(photos[i].source).pipe(fs.createWriteStream(photos[i].name)); } 也许1000电话后,我有一个套接字挂出错误。 继@Timothy Strimplebuild议我决定使用asynchronous模块。 我的代码现在是这样的: async.whilst(function () { return !stop; }, function (callback) { console.log("get next 20 image"); JM.api('/' + album.id + […]
我很难试图获得一个简单的节点应用程序在托pipe使用stream浪者托pipe的容器内运行。 本页面介绍基本方法: https : //www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html 我无法做的是从我的机器访问节点应用程序 – 理论上我相信我应该能够看到我的“你好世界”风格的节点/expression应用程序在localhost:8181 … 以下是我到目前为止: Vagrantfile: Vagrant.configure("2") do |config| config.vm.provider "docker" do |d| d.build_dir = "." d.ports = ["8080:5000"] # Is this necessary if EXPOSE is used in Dockerfile? d.expose = ["5000"] d.remains_running = true d.volumes = ["/shared"] end config.vm.network "forwarded_port", guest: 8080, host: 8181 config.vm.synced_folder "~/Documents/shared", "/shared" end Dockerfile: […]
我正在编写自己的节点stream,在文本stream中输出每行文本的对象。 这是最终的结果应该是什么样的: fs.createReadStream('foobar') .pipe(myCustomPlugin()); 实现将使用through2和event-stream来through2事情: var es = require('event-stream'); var through = require('through2'); module.exports = function myCustomPlugin() { var parse = through.obj(function(chunk, enc, callback) { this.push({description: chunk}); callback(); }); return es.split().pipe(parse); }; 但是,如果我把这个分开,我所做的就是: fs.createReadStream('foobar') .pipe( es.split() .pipe(parse) ); 这是不正确的。 有没有更好的办法? 我可以inheritancees.split()而不是在实现中使用它吗? 有没有事件stream或类似的线路上实施拆分的简单方法? 一个不同的模式会更好吗? 注意:我故意在函数内部进行链接,因为myCustomPlugin()是我试图公开的API接口。