【发布时间】:2019-10-15 13:06:59
【问题描述】:
我想通过 WebSockets 实现大文件的上传,并让服务器将文件存储在数据库或对象存储中。
我正在试用spring-websocket 库,据我了解,我需要扩展BinaryWebSocketHandler 类并在那里实现文件存储。
public class MyWebSocketHandler extends BinaryWebSocketHandler {
@Override
protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
// Store file in DB/OS...
}
}
虽然这看起来很棒,但我的问题是我要处理的 BinaryMessage 只允许我使用 ByteBuffers。我假设这意味着整个文件被加载到内存中并存储在这个ByteBuffer 对象中(当然,除非我也覆盖了supportsPartialMessages 方法)。这是正确的吗?
如果是,这对我来说将是一个大问题,因为我不想在内存中存储大文件。我期待能够访问InputStream 并从那里读取文件。看起来这应该是可能的,因为spring-websocket 在后台使用 Java WebSocket API,并且它们允许MessageHandlers 处理InputStreams(请参阅https://docs.oracle.com/javaee/7/api/javax/websocket/MessageHandler.Whole.html)。
不幸的是,我在我的处理程序中找不到任何访问InputStream 的方法。有谁知道这是否真的可能?如果不是,这作为功能请求是否有意义,或者这是否会以某种方式滥用 WebSockets?
【问题讨论】:
标签: java websocket spring-websocket