当前位置: 首页 > 知识库问答 >
问题:

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

毋澄邈
2023-03-14

我正在使用Spring webSocket(STOMP作为子协议)和Sockjs开发一个消息应用程序

我应该提供支持在消息中发送文件。

根据这张票证,sockjs不支持二进制数据,但STOMP支持。

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

我有几个问题:

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

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

非常感谢。

编辑:如果使用base64是唯一的选项,我宁愿发出POST请求来保存包含附件的消息,而不是使用base64编码。有什么好主意吗?

共有3个答案

孙自怡
2023-03-14

你可以看看binaryjs。它promise使用websockets为web提供实时二进制流。

让我们检查一下例子

https://github.com/binaryjs/binaryjs/tree/master/examples

您应该检查大气(wasync),链接将指导您如何实施。

据了解,您可以在客户端使用[base64 polyfill lib]浏览器回退方案(https://github.com/davidchambers/Base64.js/) .

最好的问候

章兴发
2023-03-14

另一种选择是只使用WebRTC发送二进制图像。这样做的优点之一是,这些消息将完全是对等的。您只需要在Web应用程序中实现此功能,而不需要在后端实现。这样,您就不需要为图像使用的带宽付费。不幸的是,IE不支持WebRTC。

东方弘壮
2023-03-14

如果二进制数据是base64编码的,则任何Web套接字实现都将处理二进制数据。这实际上是将二进制流序列化为字符串。所有套接字传输和包装都可以处理字符串数据。任何JavaBase64实现都应该可以工作。

在浏览器方面,bas64在现代浏览器中使用btoa()和atob()处理。如果您支持传统浏览器,您可能需要一个多边形填充。

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

 类似资料:
  • 问题内容: 我正在制作一个应用程序,用于将图像从Android设备发送到在PC上运行的Java应用程序。客户端(android)上的图片是,我将其转换为,以便通过蓝牙发送到服务器。 请注意,位图来自已压缩的文件,因此我不需要再次对其进行压缩。 我在服务器(Java)上使用以下代码: 客户端没有错误。但是我在服务器端(Java应用程序)遇到此异常: java.lang.IllegalArgument

  • 问题内容: 在我的开发环境中,我有两个服务器。一个通过http请求将图像发送给另一个。 客户端服务器执行以下操作: 收到请求的服务器执行以下操作: 如果我发送小图像,则效果很好。但是,如果我发送了较大的图像,尽管文件保存正确,则仅显示图像的第一上部。其余为黑色。图像尺寸正确。 我想这只是文件中写入的图像的第一块。我尝试创建一个和一个,但似乎不起作用: 我可以直接从二进制数据流传输到文件吗?对于我所

  • 我是一名服务器端开发人员,学习vanilla JS的诀窍。我需要澄清我的概念,即为我在JS中创建的图像对象发送Ajax POST请求——这个问题与此有关。 想象一下一个网络应用,用户上传照片供他人查看。在上传每个图像时,我使用vanilla JS确认图像的mime类型(通过解释幻数),然后调整图像大小以达到优化目的。 调整大小后,我会: 返回的图像对象必须通过Ajax请求发送到后端。比如: 然而,

  • 我目前正在通过邮递员的原始类别发送类似的东西。这工作很好,但我不能附上一个图像 这不起作用,有没有办法让我选择一个文件,然后使用raw json指向那个文件?

  • 问题内容: 您好,我尝试使用Java中的客户端-服务器类发送文件。由于某种原因,当调用发送文件的方法时,套接字关闭。这是代码: 和来自客户端的代码: 和我得到的错误消息:严重:null java.net.SocketException:套接字已关闭 我对此并没有真正的经验,所以如果有帮助的话会很棒。 问题答案: 该方法返回一个,代表它实际读取的字节数。不能保证从字节数组中读取所需的字节数。它通常会

  • 我使用了代码从这里如下,只得到了一半的图片发送,谁能告诉我原因吗?获取大小和读取大小的代码对我来说太复杂了,所以我搞不清楚。 正如@EJP评论的那样,最可能的问题是在receive部分,InputStream.Read(Byte[]byteArray)不能完全加载byteArray。如果我使用dataInputStreamdis=new DataInputStream(inputStream),那