将Blob数据转换为JavaScript或节点中的Raw缓冲区

Kam*_*ngh 6 javascript printing buffer node.js jspdf

我正在使用jsPDF插件,该插件会生成PDF并将其保存到本地文件系统。现在在jsPDF.js中,有一些代码以blob格式生成pdf数据:

var blob = new Blob([array], {type: "application/pdf"});
Run Code Online (Sandbox Code Playgroud)

并进一步将Blob数据保存到本地文件系统。现在而不是保存,我需要使用plugin node-printer插件打印PDF 。

这是一些示例代码

var fs = require('fs'),
var dataToPrinter;

fs.readFile('/home/ubuntu/test.pdf', function(err, data){
    dataToPrinter = data;
}

var printer = require("../lib");
printer.printDirect({
    data: dataToPrinter,
    printer:'Deskjet_3540',
    type: 'PDF',
    success: function(id) {
        console.log('printed with id ' + id);
    },
    error: function(err) {
        console.error('error on printing: ' + err);
    }
})
Run Code Online (Sandbox Code Playgroud)

fs.readFile()读取PDF文件,并生成原始缓冲区格式的数据。

现在,我想要将“ Blob”数据转换为“原始缓冲区”,以便可以打印PDF。

Gui*_*ato 28

如果您不使用 NodeJS,那么您应该知道浏览器没有 Buffer 类实现,并且您可能正在将代码编译到 browserify 等特定于浏览器的环境。在这种情况下,您需要这个库将您的 blob 转换为 Buffer 类,该类应该尽可能完美地等于 NodeJSBuffer对象(实现位于feross/buffer)。

如果你正在使用node-fetch(不是OP的情况)那么你可能会从响应对象中得到一个blob:

const fetch = require("node-fetch");
const response = await fetch("http://www.stackoverflow.com/");
const blob = await response.blob();
Run Code Online (Sandbox Code Playgroud)

这个 blob 是一个内部实现,仅存在于node-fetchfetch-blob内部,要将其转换为原生 NodeJSBuffer对象,您需要首先将其转换为 arrayBuffer:

const arrayBuffer = await blob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
Run Code Online (Sandbox Code Playgroud)

然后可以将该缓冲区对象用于文件写入和服务器响应等操作。


Iva*_*era 9

对我来说,它适用于以下内容:

const buffer=Buffer.from(blob,'binary');
Run Code Online (Sandbox Code Playgroud)

因此,这个缓冲区可以通过 fs 节点包存储在 Google Cloud Storage 和本地磁盘中。

我使用 blob 文件,通过 ddp 协议(Meteor)将数据从客户端发送到服务器,因此,当该文件到达服务器时,我将其转换为缓冲区以便存储它。

  • 尝试此操作并收到`TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是字符串类型或 Buffer、ArrayBuffer、Array 或类数组对象的实例。收到 Blob 的实例` (9认同)
  • @TerryWindwalker尝试`await blob.arrayBuffer().then((arrayBuffer) => Buffer.from(arrayBuffer, "binary"))` (3认同)

Ale*_*rev -3

尝试:

var blob = new Blob([array], {type: "application/pdf"});
var buffer = new Buffer(blob, "binary");
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不适用于 NodeJs。我收到错误:“‘Blob’类型的参数不可分配给‘字符串’类型的参数。” (20认同)