0

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

背景:我正在使用 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 编码对我来说是不可能的。

4

1 回答 1

0

如果它只是关于格式,你可以使用content-type标题来指定它是什么类型的文件类型:text/plain或者image/png你想使用的任何东西......

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

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

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

要将您的代码片段用作基础,您可以按如下方式实现它:

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.');
    });
});

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

希望这可以帮助。

于 2013-08-13T16:39:03.863 回答