Java:接收一个多部分HTTP响应

10
我正在编写一个Java客户端应用程序,用于从IP相机接收实时的M-JPEG视频。该视频由相机作为无限multipart HTTP消息发送,每个部分都是单个JPEG帧。我需要在每个到达的帧到达时处理它们,因此我希望有一种方式可以发出异步HTTP请求,每个消息部分/视频帧到达时会触发事件。
请问是否有任何库可以实现这一点?所有我在Google上找到的示例都不可用,因为它们使用阻塞调用仅在整个响应完成接收后解析并将其拆分为部分(这显然对于无限响应不起作用)。
我意识到我可以手动按消息边界分割数据,但感觉这样做相当于重复造轮子。
4个回答

4

谢谢 - Cambozola 看起来正是我想要做的,我会再看看他们的代码。我本来希望使用一个适当的 HTTP 库而不是自定义代码,因为它都是标准的 HTTP,但看起来没有太多可用于我想要做的事情。 - user52386
似乎HTTP推送仅用于网络摄像头和一些实验中。代码也不是很复杂。我只会建议确保正确处理连接失败,并且不要假设所有信息都会正确到达。任何浏览器API也应该正确处理这个问题。 - Loki

1

尝试使用Apache Commons中的HttpClient。源代码有几个类展示了如何以流的方式读取多部分内容。


我查看了这个库的文档,看起来它只能用于解析多部分HTTP请求,而不能用于响应。根据这个帖子,它无法用于解析多部分响应:http://markmail.org/message/l6t46xzmikkbxo2e。我正在研究他们在链接中提到的Mime4j。 - user52386

0
我已经编写了用于处理多部分请求的类,用于我的项目Sceye-Fi。这是一个使用Java 6自带的com.sun.net.httpserver类的HTTP服务器,用于接收来自Eye-Fi卡的照片上传。 理论上,没有什么能阻止它在无限的多部分请求中工作。 希望这能有所帮助。

0

由于问题和现有答案有点旧,我想提供一个更近期的答案。

现在有Spring Webflux项目。您的用例可以轻松地以反应式方式实现。因此,在您的情况下,类MultipartHttpMessageReader将完成所有繁重的工作。

如果它的行为不完全符合您的需求,您可以轻松地扩展它并覆盖方法以满足您的喜好。然后,您的自定义读取器可以像这样注册为bean:

@Configuration
public class MultipartMessageConverterConfiguration {

  @Bean
  public CodecCustomizer myCustomMultipartHttpMessageWriter() {
      return configurer -> configurer.customCodecs()
                                     .register(new MyCustomMultipartHttpMessageWriter());
    }
}

更详细的答案可以在这里找到 https://dev59.com/3J_ha4cB1Zd3GeqP1ZrC#73534723 - Younes El Ouarti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接