0

ある種のタイプ属性でタグ付けすることにより、サーバーからのバイナリメッセージを識別する方法はありますか?

背景: node.js を使用しており、クライアントにバイナリ メッセージを送信しています。現時点では、これらは blob として送信される画像のみです。したがって、クライアント側では、着信メッセージを Blob のインスタンスでテストしてから、写真で何かを行います。

しかし、今では、.txt などの他のファイルを websocket プロトコル経由で (ダウンロード用に) 送信したいと考えています。これは HTTP リクエストなどよりもはるかに簡単だと思います。しかし、画像、テキストファイル、または sth の場合、着信バイナリ メッセージを区別する必要があります。そうしないと。

Chrome Developertools は、受信した画像 (blob) の type 属性が空の文字列であることを示しています。私が読んだように、この属性は読み取り専用なので、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 内でエンコードされたバイナリ コンテンツを提供します (Base64 など、JSON と互換性のある任意のエンコーディングを使用)。そのような:

{
  "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 に答える