如何在java websocket服务器上读取通过websocket发送的javascript BLOB数据
How to read javascript BLOB data sent over websocket on java websocket server
我试图通过javascript在我的网页上上传一个图片文件作为BLOB类型的文件,然后将该文件发送到我的java websocket服务器,以将该文件存储在用于该网页的服务器上。
我在websocker服务器java端的代码是读取BLOB数据并写入文件如下,
public void testMethod(final WebMessage message){
ByteBuffer b = null;
try {
b = message.getByteBufferArg(0);
} catch (WebMessageException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
File file = new File("/user/Desktop/pic.jpg");
try {
file.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
FileOutputStream stream = new FileOutputStream(file.getAbsoluteFile());
stream.write(b.array());
logger.info("done writing file");
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.trace(e.getMessage());
}
}
然后当我试图打开图片时,它显示Error interpreting JPEG image file (Not a JPEG file: starts with 0x00 0x00)
。
基本上我想知道我怎么能读取这个BLOB数据发送到我的websocket服务器,我怎么能把这个数据写出来到一个可用的文件?
所以从Blob中读取的唯一方法是使用FileReader (https://developer.mozilla.org/en-US/docs/Web/API/FileReader),一旦您从Blob中读取数据(我只是在BinaryArray中读取- https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsBinaryString),您可以直接将其发送到输出流中的文件。
来自文档- https://developer.mozilla.org/en/docs/Web/API/Blob:
从Blob中提取数据示例
从Blob中读取内容的唯一方法是使用FileReader。下面的代码将Blob的内容作为类型化数组读取。
var reader = new FileReader();
reader.addEventListener("loadend", function() {
// reader.result contains the contents of blob as a typed array
});
reader.readAsArrayBuffer(blob);
通过使用FileReader的其他方法,可以将Blob的内容读取为字符串或数据URL。
解决这个问题的方法是不将数据作为BLOB从javascript端发送,您需要将数据读取为某种可读格式。在这种情况下,我使用FileReader
API来读取BLOB数据作为dataurl
。使用该方法读取后,数据为base64
可读格式,可以通过websocket发送,并在base64 String解码后写入另一端的文件。
- Javascript connect to websocket
- JavaScript和Java WebSocket SSL连接错误
- 使用本机JavaScript WebSocket连接到Autobahn的WrappingWebSocketServerF
- 使用JavaScript将Websocket连接到Qt财富服务器
- 未在IOS上调用Javascript Websocket OnOpen
- 如何使用javascript中的间隔以顺序方式处理websocket响应
- JavaScript WebSocket 非以 null 结尾的字符串
- websocket javascript read write
- 使用 JavaScript 和 websocket 显示来自 blob 的图像
- 在单个 Javascript 函数中处理多个 websocket 订阅,但只有一个连接对象
- Javascript:正确全球化 websocket send 函数
- Websocket Rails JavaScript 不起作用
- 如何处理通过 JavaScript 通过 WebSocket 发送回 Python 服务器的 blob
- WebSocket JavaScript:发送复杂对象
- 当源是 base64 websocket 数据时,图像加载不触发 JavaScript
- JavaScript:查找本地 WebSocket 服务器
- JavaScript WebSocket 字符编码问题(文本)
- WebSocket javascript客户端和python服务器.在输出中检索垃圾
- Websocket Javascript的多个处理程序
- 多个子协议Websocket Javascript客户端和Libwebsockets服务器不工作