Tag: 二进制数据

Node.js将二进制文件转换为utf8

我有一个二进制格式(bytea)存储在postgresql数据库中的jrmxl(Jasper报告)文件。 我试图读取该文件,并将其转换为普通的jrmxl(XML)文件并将其保存在磁盘上。 这是我迄今为止所尝试的 var fs = require('fs'); exports.saveFile = function (pg) { //pg is the postgres connection to query the db pg.query('Select data from data_file where id = 123', function (err, result) { if (err) { console.log(err); return; } var data = result.rows[0].data; //Buffer.isBuffer(data) === true // I can get the data here. Now I […]

在节点stream中找不到mp3帧头同步位

我几乎是在这一个绳索的末尾。 我试图parsing出的MP3帧数据,但我有一个时间定位任何帧的熊。 我正在使用节点0.10,并尝试使用新的streamapi(虽然它不适用于旧的) 我正在循环寻找11位同步字的缓冲区,但我从来没有find它。 var stream = fs.createReadStream('./myAudioFile.mp3') stream.on('readable', function(data){ var chunk, header; while (null !== (chunk = stream.read())) { for (var i = 0; ( i + 4 ) <= chunk.length; i++) { header = chunk.readUInt32LE(i) if( (header & 0xFFE00000) === 0xFFE00000 ) { //NEVER GET HERE!!! } } } 我在这里错过了什么?

将二进制数据从Nodejs缓冲区写入Meteor客户端的blob

我试图创build一个CSV文件,将在服务器上以UTF-16LE编码进行保存,然后将结果传递给客户端。 这就是我在Coffeescript中所做的: Meteor.methods { iconv: (data, from="UTF-8", to="UTF-16LE") -> Iconv = Meteor.require('iconv').Iconv iconv = new Iconv(from, to) res = iconv.convert(data) res } 现在,如果我用线路从服务器写入文件 fs.writeFileSync('/tmp/test.csv', res) 该文件正确生成。 但是,我想避免在服务器上创build一个文件,并将其直接保存在客户端(使用filesaver库 )。 示例客户端代码如下所示: exportToCsv = (data="tête", filename) -> callback = (err, res) -> blob = new Blob([res], {type:'text/csv;charset=UTF-16LE'}) saveAs(blob, filename) Meteor.call('iconv', data, callback) 正如你所看到的,我testing的数据是一个带有特殊字符('ê')的简单string。 我的问题是我无法将nodejs缓冲区传递给客户端。 它被自动序列化为: Object {0: 116, […]

读取/写入/复制ArrayBuffer到另一个具有偏移量的ArrayBuffer

假设我有一个ArrayBuffer ,它是一个mp4文件。 我想创build一个新的ArrayBuffer与一些额外的字节作为头信息,然后将mp4缓冲区存储在新的ArrayBuffer的其余部分。 // … assume the `data` variable is an existing ArrayBuffer with the contents // of the mp4 video file. var ab = new ArrayBuffer(10 + data.byteLength) var view = new DataView(ab); view.setInt32(0, 29102); // header information 1 view.setInt32(4, 18282); // header information 2 view.setInt16(8, 576); // header information 3 现在,在这一点上,我不知道如何将data的内容写入新的ab缓冲区,所以最后我有一个ArrayBuffer ,它包含了开头的3组数字以及整个内容的video。 我尝试使用以下内容: […]

节点JS + DIME – 在POST中发送二进制数据

有一个1740字节长的文件,它的内容被读到一个Buffer res 。 res.length是1740, res.toString('binary', 0, res.length).length也是1740。 我使用request库发送POST请求 request.post({ url: endpoint, headers: headers, body: res.toString('binary', 0, res.length) }, callback); 请求转到gSOAP服务器。 通过在服务器上debugging几个小时来发送请求,我们发现:服务器发出的请求长度为1753字节,有些字符被转换。 特别是,hexB7变为C2 B7 ,所以按照此处所述进行转换: http : //www.fileformat.info/info/unicode/char/b7/index.htm 我尝试设置encoding: 'binary'和encoding: null请求参数,相同的结果(与encoding : null我只收到错误消息作为缓冲区,但就是这样)。 我尝试使用https库和pipe道strean到请求,相同的结果。 最好的问候,亚历山大 编辑 目前,我发现了一个解决方法,用cURL发送一个来自cli的请求–data-binary "@file_to_which_i_dumped_the_request"'这样做。 但是应用程序和nodejs服务器本身是在一个安装程序中发布的,所以我们必须在用户的机器上安装cURL,这是可以接受的,但不是最好的select。 那么有没有办法发送一个二进制POST body与nodejs? 谢谢。

将Binary.toString('encode64')转换回Binary

我见过几个 教程,解释如何将二进制图像转换为编码64表示forms: var image = new Buffer(bl.toString(), 'binary').toString('base64'); 我的问题是,如何返回这个string表示,回到它的缓冲区的二进制数据。