Tag: 缓冲区

Node.js / MongoDB / Mongoose:缓冲区比较

首先,有一点背景: 我试图检查一下图像的二进制数据是否已经保存在Mongo中。 鉴于以下模式: var mongoose = require('mongoose') , Schema = mongoose.Schema; var imageSchema = new Schema({ mime: String, bin: { type: Buffer, index: { unique: true }}, uses : [{type: Schema.Types.ObjectId}] }); module.exports = mongoose.model('Image', imageSchema); …我想查询是否存在一个图像,如果它添加一个引用,我的对象正在使用它,然后更新它。 如果没有,我想创build(upsert)它。 鉴于它不存在的情况下,下面的代码完美的作品。 如果是这样,下面的代码不会,并将另一个图像文件添加到Mongo。 我觉得这可能是一个比较问题的Mongo缓冲区types与节点缓冲区,但我不知道如何正确地比较它们。 请让我知道如何更新下面! 谢谢! Image.findOneAndUpdate({ mime : contentType, bin : image }, { $pushAll : { […]

JavaScript:读取8个字节到64位整数

我有一个包含八个字节的缓冲区对象。 这八个字节现在应该被解释为64位整数。 目前我使用以下algorithm: var int = buff[0]; for (var i = 1; i < buff.length; i++) { int += (buff[i] * Math.pow(2, 8 * i)); } console.log(int); 这工作,但我相信有更好的方法(也许使用Uint64Array)。 不幸的是,我无法find一个Uint16Array如何帮助我。 问候 更新: // puts two 32bit integers to one 64bit integer var bufInt = (buf.readUInt32BE(0) << 8) + buf.readUInt32BE(4);

节点js的Buffer.toString('binary')

虽然缓冲区的“二进制”已被弃用,但我必须使用它:我使用节点js + express写了一个web应用程序。 用户可以下载文件,如果不用,文件名会乱码 res.download(allpath,buf0.toString('binary')); 看价值(是一个中国字符): console.log(new Buffer('牛')); 输出:缓冲区,e7,89,9b 和 var buf0=new Buffer('牛'); console.log(new Buffer(buf0.toString('binary'))); 输出:缓冲区,c3,a7,c2,89,c2,9b 这个algorithm有什么意义,为什么使用二进制toString是工作?

如何附加到nodejs中的excel文件

我目前正在一个窗体,将采取用户input,并将其添加到Excel表单的一行,截至目前我已经设法使用第三方插件(node-xls具体)的Excel表。 问题出现,如果我想添加另一行到Excel,它删除旧的条目,并添加新的,而不是将数据附加到下一行。 尝试读取excel,然后连接缓冲区和再次写入文件,但事实certificate,它正在破坏文件,并使其无法使用。 我如何将数据附加到Excel表单的最后? 我是新的nodejs和缓冲区 var fs = require('fs'); var NodeXls = require('node-xls'); var tool = new NodeXls(); var xls = tool.json2xls({firstName: "arjun", lastName: "u", dob:"12/3/2008"}, {order:["firstName", "lastName", "dob"]}); fs.appendFile('output.xlsx', xls, 'binary', function(err){ if(err) alert("File is readOnly or is being used by another application, please close it and continue!"); });

NodeJS:什么是处理TCP套接字stream的正确方法? 我应该使用哪个分隔符?

根据我在这里所理解的,“V8有一个世代垃圾收集器,随机移动对象,节点不能得到一个指向原始string数据的指针来写入套接字。 所以我不应该将来自TCPstream的数据存储在string中,特别是如果该string变得比Math.pow(2,16)字节更大。 (希望我到现在为止..) 那么什么是处理来自TCP套接字的所有数据的最佳方式? 到目前为止,我一直试图使用_:_:_作为分隔符,因为我认为它是某种独特的,不会混淆其他的东西。 数据的一个样本将会是something_:_:_maybe a large text_:_:_ maybe tons of lines_:_:_more and more data 这是我试图做的: net = require('net'); var server = net.createServer(function (socket) { socket.on('connect',function() { console.log('someone connected'); buf = new Buffer(Math.pow(2,16)); //new buffer with size 2^16 socket.on('data',function(data) { if (data.toString().search('_:_:_') === -1) { // If there's no separator in the data that […]

使用Node.js和SSH2从SFTP服务器读取文件

我有一个很奇怪的问题,在Node.js中读取stream。 我正在使用SSH2在我和sftp服务器之间创build一个sftp连接。 然后我尝试从sftpstream创build一个读取stream。 从读取stream的发射'数据'事件我追加数据到一个数组。 当读取stream的'close'事件发生时,我调用Buffer.concat创buildconcat所有我已经检索到的数据块到一个缓冲区。 这是在堆栈溢出问题中所描述的其他问题中所描述的相同技术。 例如这里 。 但是,我无法使用我检索的数据。 看起来像缓冲区的大小减less了32个字节,然后我试图检索的文件(从计算检索的数据的长度)。 这可能与我的SFTP连接有关吗? 或者我如何创build我的阅读stream? 如果重要,该文件是ziptypes。 当我试图解压文件(在node.js和手动)后读取缓冲它不起作用。 调查后我发现: 当我在文件上使用readdir时,文件的大小是正确的。 使用FTP(JSFTP)对我的开发FTP服务器使用上述相同的技术很好。 任何build议表示赞赏! 这是我的代码: var Client = require('ssh2').Client; var m_ssh2Credentials = { host: config.ftpHostName, port: config.ftpPort, username: config.ftpUser, password: config.ftpPassword, readyTimeout: 20000, algorithms: { cipher: ["3des-cbc", "aes256-cbc", "aes192-cbc","aes128-cbc"]} }; … var conn = new Client(); var dataLength = 0; conn.on('ready', […]

Node.js中的面向行的stream

我正在开发一个使用Node.js的多进程应用程序。 在这个应用程序中,父进程会产生一个subprocess,并通过pipe道使用基于JSON的消息传递协议与其进行通信。 我发现大的JSON消息可能会被“截断”,使得发送到pipe道上的数据侦听器的单个“块”不包含完整的JSON消息。 此外,小JSON消息可能被分组在同一块中。 每个JSON消息将由一个换行符分隔,所以我想知道是否已经有一个实用程序将缓冲pipe道读取stream,使它一次发出一行(因此,对于我的应用程序,一个JSON文档一次)。 这似乎是一个很常见的用例,所以我想知道是否已经完成。 我会很感激任何人可以提供的指导。 谢谢。

nodejs将64位无符号整数写入缓冲区

我想以64字节(8字节)的大整数存储一个nodejs缓冲区对象的big endian格式。 关于这个任务的问题是nodejs缓冲区只支持最大写32位整数(使用buf.write32UInt32BE(value,offset))。 所以我虽然为什么不能把64位整数分开? var buf = new Buffer(8); buf.fill(0) // clear all bytes of the buffer console.log(buf); // outputs <Buffer 00 00 00 00 00 00 00 00> var int = 0xffff; // as dezimal: 65535 buf.write32UInt32BE(0xff, 4); // right the first part of the int console.log(buf); // outputs <Buffer 00 00 00 00 […]

nodejs将原始图像数据写入jpeg文件?

我从获取请求获取数据。 数据(在响应的主体中)看起来像这样: … ÿÀ " ÿÄ ÿÄ N !1"AQa2q¡#BR±ð3brS²ÁÂÑá$ñCDTst¢³&45dÃÒÿÄ ÿÄ – !1A"Qa¡ðq±ÁÑ2áÿÚ ? û." """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """R1º#ª¥7Jíî½M6îNö ]·!]=Fvß`7~qÆee²%·JokkZüCbìþ<ù{ã9öùË®´(%A,Ià 2I?t×bn6wÆù¥V 2SÀ><k5ºÙØ92EhÎçü¨/aÝ!ã|ñþ¥ñßT}U«¦ÒÚµ«xuÕfƳ KØ {ù{ð$·DúBMZÆcp}´R|Mä2ó8üg)·ùôfõ$zXiRÞü}óÆ>,êÚûíR5ý:\ ….. 响应标题如下所示: HTTP/1.1 200 OK Content-Length: 26965 Access-Control-Allow-Origin: * Content-Type: image/jpeg; charset=UTF-8 […]

NodeJS:如何释放在V8内存堆外部分配的缓冲区

我有一个应用程序,我从服务器上顺序下载MP3文件,暂时将它们存储在我的服务器中,然后直接将它们stream式传输到客户端,如下所示: function downloadNextTrack(){ var request = http.get('http://mp3server.com', function(response){ response.on('data', function(data) { fs.appendFile('sometrack.mp3', data, function (err) {}); }); response.on('end', function(){ streamTrack('sometrack.mp3'); } }); }; var clients = []; // client response objects are pushed to this array when they request the stream through a route like /stream.mp3 var stream; function streamTrack(track){ stream = fs.createReadStream(track); stream.on('data', function(data){ […]