当前位置: 首页 > 面试题库 >

从Node.js的子进程中读取二进制数据

邴宏大
2023-03-14
问题内容

当尝试从ImageMagick子进程中读取Node.js中的数据时,它损坏了。

一个简单的测试用例如下:

var fs = require('fs');
var exec = require('child_process').exec;

var cmd = 'convert ./test.jpg -';
exec(cmd, {encoding: 'binary', maxBuffer: 5000*1024}, function(error, stdout) {
  fs.writeFileSync('test2.jpg', stdout);
});

我希望这等同于可以convert ./test.jpg - > test2.jpg正确写入二进制文件的命令行。

最初存在maxBuffer选项太小并导致文件被截断的问题。增加该值之后,文件现在看起来比预期的要大一些,并且仍然损坏。来自stdout的数据是通过HTTP发送所必需的。

从ImageMagick stdout读取此数据的正确方法是什么?


问题答案:

初始方法存在两个问题。

  1. maxBuffer必须足够高以处理子进程的整个响应。

  2. 二进制编码需要在各处正确设置。

完整的工作示例如下:

var fs = require('fs');
var exec = require('child_process').exec;

var cmd = 'convert ./test.jpg -';
exec(cmd, {encoding: 'binary', maxBuffer: 5000*1024}, function(error, stdout) {
  fs.writeFileSync('test2.jpg', stdout, 'binary');
});

另一个示例,使用Express Web框架以HTTP响应发送数据,如下所示:

var express = require('express');
var app = express.createServer();

app.get('/myfile', function(req, res) {
  var cmd = 'convert ./test.jpg -';
  exec(cmd, {encoding: 'binary', maxBuffer: 5000*1024}, function(error, stdout) {
     res.send(new Buffer(stdout, 'binary'));
  });
});


 类似资料:
  • 问题内容: 是否可以在Python 2.6中将stdin读取为二进制数据?如果是这样,怎么办? 我在Python 3.1文档中 看到这很简单,但是在2.6中执行此操作的工具似乎并不存在。 如果3.1中描述的方法不可用,是否有办法关闭stdin并以二进制模式重新打开? 更新资料 为了清楚起见,我在MS-DOS外壳程序中使用“类型”将二进制文件的内容传递给我的python代码。据我了解,这应该等效于U

  • 问题内容: 我正在尝试从URLConnection读取二进制文件。当我使用文本文件对其进行测试时,它似乎可以正常工作,但对于二进制文件则不能。发送文件时,我在服务器上使用以下mime类型: 但是到目前为止,似乎没有任何效果。这是我用来接收文件的代码: 问题答案: 我就是这样

  • 问题内容: 我正在尝试在Python中读取BMP文件。我知道前两个字节表示BMP公司。接下来的4个字节是文件大小。当我执行时: 我得到: ValueError:以10为底的int()的无效文字:’F#\ x13’ 我想做的是将这四个字节读取为整数,但是Python似乎将它们读取为字符并返回一个字符串,该字符串无法转换为整数。如何正确执行此操作? 问题答案: 该方法将字节序列作为字符串返回。要将字符

  • 我在做学校作业,要求如下:“设计一个具有名为writeArray的静态方法的类。该方法应包含两个参数:文件名和对int数组的引用。该文件应作为二进制文件打开,数组的内容应写入该文件,然后关闭该文件。在名为readArray的类中写入第二个方法。该方法我们需要两个参数:文件名和对int数组的引用。应该打开文件,从文件中读取数据并存储在数组中,然后关闭文件。在程序中演示这两种方法。" 以下是我到目前为

  • 问题内容: 在Node.js中读取二进制文件的最佳方法是什么? 我正在寻找访问“标头”中的特定字节(少于前100个字节)或逐字节读取文件的方法。 问题答案: 这是-ing由以下命令返回的文件描述符的前100个字节的示例:

  • 所以。。。我需要从.pkl文件中读取并导入图像数据集。图像存储为“二进制blob”。一旦完成了,我需要将它们转换成字节格式,这样我就可以通过Google的CloudVision运行它们。我设法在Linux虚拟机上打开了该文件(花了几天时间试图让它在Windows上工作…)。但现在我似乎无法将这个“二进制斑点”转换为我可以使用的实际图像。。。 下面是一个“二进制blob”: \1\x0 0 0 0\