通过Sockjs + Spring Websocket + Stomp发送图像/文件

Kar*_*hik 18 javascript stomp sockjs spring-websocket

我正在使用Spring websockets(STOMP作为子协议)和Sockjs开发消息传递应用程序.

我应该提供支持来发送消息中的文件.

根据这张票,sockjs不支持二进制数据,但STOMP确实如此.

我知道我们可以将图像转换为base64并通过stomp发送它,但我认为这不是最好的做法,因为有很多转换和开销.此外,我必须保存消息,所以要再次在服务器上保存这个base64编码文件我将不得不解码它们.

我有几个问题:

1)是否有通过sockjs + stomp发送图像/文件转换为Base64的解决方法是唯一的方法?

2)这可能是一个非常愚蠢的问题,但根据这个问题,可以通过STOMP发送二进制数据(没有sockjs).没有sockjs支持后备有多难?

谢谢.

编辑:如果使用base64是唯一的选择,我宁愿发出POST请求来保存具有附件的消息,而不是使用base64编码.任何更好的想法?

Mar*_*tin 5

任何Web Socket实现都将处理二进制数据(如果它是base64编码的).这基本上将二进制流序列化为字符串.所有套接字传输和包装器都可以处理字符串数据.任何Java base64实现都应该有效.

在浏览器方面,base64在现代浏览器中使用btoa()和本地处理atob().如果您支持旧版浏览器,则可能需要填充.

也就是说,如果Java服务器只是在Web用户之间代理消息,您将不需要用Java解码图像,您只需将字符串编码图像从一个套接字连接传递到另一个套接字连接.