【问题标题】:Giving binary messages a JSON-like type for identification purposes为二进制消息提供类似 JSON 的类型以进行识别
【发布时间】:2013-08-15 09:23:38
【问题描述】:

有没有办法通过使用某种类型属性标记来自服务器的二进制消息来识别它们?

背景:我正在使用 node.js,我正在向我的客户端发送二进制消息。目前,这些只是作为 blob 发送的图片。因此,在客户端,我正在使用 Blob 实例测试传入消息,然后对图片进行处理。

但现在我还想通过 websocket 协议发送其他文件,如 .txt(用于下载)。我觉得这比 HTTP 请求等简单得多。但是现在我必须对传入的二进制消息做出改变,如果它们是图像或文本文件或某事。否则。

Chrome 开发者工具告诉我,我传入的图像(blob)有一个空字符串类型属性。当我读到这个属性是只读的,所以我正在寻找一种解决方案来识别我的二进制消息,就像我可以使用 JSON 对象一样......

提前感谢每一个想法:)

编辑:

这是一个向客户端发送图像的示例。我正在为 nodejs 使用“ws”模块。

fs.readFile(path, function (err, data)
{
    if (!err)
    {
        connection.send(data, {binary: true}, function(err)
        {
            if (!err) console.log("Server finished sending image to client.");
            else console.log("Error while sending imageto client.");
        });
    }
    else console.log("Error while loading image");
});

我可以在哪里向二进制数据添加某种元数据? Base64 编码对我来说是不可能的。

【问题讨论】:

标签: javascript json html node.js binary


【解决方案1】:

如果只是关于格式,您可以使用content-type 标头来指定它是哪种文件类型:text/plainimage/png 或任何您想使用的...

当然,您可以扩展这个想法并使用自定义标头来传输您想要传输的任何信息。

或者,这是最灵活的解决方案:发回一个真实的 JSON 对象,嵌入您需要的所有元数据,并提供在 JSON 中编码的二进制内容(使用您喜欢的任何与 JSON 兼容的编码,例如Base64),如:

{
  "filename": "foo.txt",
  "content-type": "image/png",
  "binary-data": "A5EBC7FFEFDCD8975BC3..."
}

要使用您的代码 sn-p 作为基础,您可以按如下方式实现它:

fs.readFile(path, function (err, data) {
    if (err) { throw err; }
    connection.send({
        filename: 'foo.txt',
        contentType: 'image/png',
        data: JSON.stringify(data)
    }, { binary: false }, function (err) {
        if (err) { throw err; }
        console.log('Server finished sending image to client.');
    });
});

请注意,我没有测试代码,但您的最终代码应该与这个有点相似。

希望这会有所帮助。

【讨论】:

  • 谢谢。我在上面的问题中添加了一个代码 sn-p。我不知道我可以在哪里实现一种标签或元数据。
  • 我更新了我的答案。我想你现在应该能够自己弄清楚剩下的事情了。希望这可以帮助。如果是这样,如果您可以对答案进行投票并将其标记为答案,那就太好了。
  • 谢谢,但这对我不起作用。我需要接收 blob,而不是字符串。也许我应该使用标准的 HTTP Up/Download-Routines。无论如何谢谢:)
  • 你仍然可以使用(mis)using http headers的方法……
猜你喜欢
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
相关资源
最近更新 更多