Javascript 如何识别arraybuffer是字符串还是图像?
我们正在使用websocket在bytearray中传输数据。在接收端,javascript必须确定接收的ArrayBuffer类型是String还是Image。如果是字符串,则转换为字符串,否则转换为Blob。如下所示,只是我不知道如何识别arraybuffer是字符串还是图像Javascript 如何识别arraybuffer是字符串还是图像?,javascript,image,blob,arraybuffer,Javascript,Image,Blob,Arraybuffer,我们正在使用websocket在bytearray中传输数据。在接收端,javascript必须确定接收的ArrayBuffer类型是String还是Image。如果是字符串,则转换为字符串,否则转换为Blob。如下所示,只是我不知道如何识别arraybuffer是字符串还是图像 if (message instanceof ArrayBuffer) { if(message of type string) var bytearray = new Uint8A
if (message instanceof ArrayBuffer) {
if(message of type string)
var bytearray = new Uint8Array(message);
to convert to string
var out = String.fromCharCode.apply(null, bytearray);
console.log(out);
}
if(message of type image){
imageId.height = 400;
imageId.width = 600;
imageId.src = convertArrayBufferBlobUrl(message);
}
更新:
我将从服务器发送图像,如下java代码所示。如何在字节数组中附加或前置标志,以便在客户端浏览器(javascript)中将其标识为图像或字符串
写入(getSubImage(buffereImage,宽度,高度),“png”,baos);
字节[]结果=baos.toByteArray() 有两种方法。例如,如果您使用的是JPEG文件类型,则可以通过其一般特征来识别JPEG格式: 现在,这是一种有效的方法,但是你必须为每种图像类型编写一个程序,这是很乏味的 现在,this:也可以使用,这是另一个有效的答案,但它存在将数据转换为图像的开销 @dandavis建议的一个好选择是使用一些元数据,比如服务器端的标志 例如: 然而,将字节数组本身放入内存可能并不容易。 我的建议是尝试将字节数组作为json值,但如果它不起作用,请首先将字节数组
结果
转换为base64字符串,如下所示:
…也要这样做
您可以通过将obj转换为JSON字符串来发送数据
String jsonData=obj.toString();
并发送jsonData作为响应数据。图像的格式是什么?您需要随数据一起发送元数据,如文件名、mime类型等。您可以给我发送一个示例吗?即使不发送mime类型,您也可以使用图像类型的魔法/签名Websocket通常使用HTTP作为传输层的基础。因此,可以使用主消息将HTTP头附加到HTTP正文中。服务器可以设置
内容类型
、cookie或您自己的自定义标题。通常内容类型
(具有图像/png
或文本/plain
等值)就足够了,如果不够,则自定义标题可以解决所有问题。您需要在服务器和客户机上使用的确切API主要取决于您使用的库。我已经更新了问题。更新了我的答案,但是,我现在没有办法验证。或者检查@technosaurus对你的问题的评论,这与我在回答中提到的你正在使用的文件的一般特征基本相同。如果您使用的是有限类型的文件,这是一个确定的解决方案,就像您使用png的问题一样。
import net.sf.json.JSONArray;
ImageIO.write(getSubImage(bufferedImage,width,height), "png", baos );
byte[] result=baos.toByteArray();
JSONObject obj = new JSONObject();
obj.put("imgFlag","true");
obj.put("imgData", result);
String jsonData=obj.toString();