首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将二进制消息作为输入流处理?

如何将二进制消息作为输入流处理?
EN

Stack Overflow用户
提问于 2019-10-15 13:06:59
回答 1查看 718关注 0票数 0

我希望通过WebSockets实现大文件的上传,并让服务器将文件存储在数据库或对象存储中。

我正在尝试spring-websocket库,据我所知,我需要扩展BinaryWebSocketHandler类并在那里实现文件存储。

代码语言:javascript
复制
public class MyWebSocketHandler extends BinaryWebSocketHandler {

    @Override
    protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
          // Store file in DB/OS...
    }

}

虽然这看起来很棒,但我的问题是,我要处理的BinaryMessage只允许我使用ByteBuffer的,我假设这意味着整个文件被加载到内存中并存储在这个ByteBuffer对象中(当然,除非我也重写了supportsPartialMessages方法)。这是正确的吗?

如果是的话,这对我来说是个大问题,因为在内存中存储大型文件不是我想要做的事情。我本来希望能够访问InputStream并从那里读取文件。这似乎也是可能的,因为spring-websocket在幕后使用了Java,并且允许spring-websocket处理InputStream(参见https://docs.oracle.com/javaee/7/api/javax/websocket/MessageHandler.Whole.html)。

不幸的是,我无法在我的处理程序中找到访问InputStream的任何方法。有人知道这是否真的有可能吗?如果没有,这作为一个特性请求是否有意义,或者这是否是对WebSockets的误用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-15 13:19:21

您可以重写AbstractWebSocketHandler.supportsPartialMessages,它声明:

如果将此标志设置为true,并且底层的WebSocketHandler.handleMessage(WebSocketSession,服务器支持部分消息,则可以拆分大型WebSocket消息或未知大小的消息,并可能通过对WebSocketMessage的多次调用来接收该消息)。标志WebSocketMessage.isLast()指示消息是否是部分的,以及它是否是最后一部分。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/socket/WebSocketHandler.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58395489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档