【问题标题】:Spring Boot - Writing media (image, mp3, mp4) file to response output streamSpring Boot - 将媒体(图像、mp3、mp4)文件写入响应输出流
【发布时间】:2015-09-27 20:44:28
【问题描述】:

我是 Servlet 和 Spring 框架的新手。 我尝试通过 Rest Service 从目录中获取媒体文件。

对于视频/mp4,我找不到任何东西。

对于音频,我这样做了: Writing mp3 file to response output stream

对于图片我这样做了:

@RequestMapping("/tmp/{uuid}")
@ResponseBody
public ResponseEntity<InputStreamResource> getTmp(@PathVariable("uuid") String uuid)
        throws IOException {

    Path path = Paths.get("/media/psmaster/HDD/TUC-IPS/" + uuid);
    String contentType = Files.probeContentType(path);
    FileSystemResource file = new FileSystemResource("/media/psmaster/HDD/TUC-IPS/" + uuid);
    return ResponseEntity
            .ok()
            .contentLength(file.contentLength())
            .contentType(
                    MediaType.parseMediaType(contentType))
            .body(new InputStreamResource(file.getInputStream()));
}

有人可以帮忙解决问题吗?

【问题讨论】:

  • 如果可能的话,我想通过一个 Rest Service 获取任何类型的文件。
  • “问题”?你什么都没提。
  • org.apache.catalina.connector.ClientAbortException: java.io.IOException: org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393) 在 org.apache 的管道损坏。 tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:426) 在 org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:342) 在 org.apache.catalina.connector.OutputBuffer.close(OutputBuffer. java:295) 在 org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:...
  • 我不知道到底是什么问题。
  • 直接在问题中包含所有相关信息(使用编辑按钮),而不是在 cmets 中。 ClientAbortException 暗示数据的消费者是罪魁祸首;关于这个特殊例外有很多问题,请使用顶部的搜索栏。

标签: spring file spring-boot mp4 outputstream


【解决方案1】:

如果您使用的是 Spring 4.2,您可以使用StreamingResponseBody,看看这个post

【讨论】:

    【解决方案2】:

    你也可以给Spring Content看看。它允许您使用与 Spring Data 类似的编程技术快速轻松地构建内容服务。您还可以将它与 Spring Data 配对,以额外存储和搜索视频的元数据。通过定义单个接口并在项目中包含适当的 Spring Content 依赖项,您可以创建一组 REST 端点,允许您管理视频的整个生命周期,包括流式传输。

    【讨论】:

      【解决方案3】:

      您可以使用 streamsHttpServletResponse 编写媒体:

      @RequestMapping(value = "/image/{imgName}", method = RequestMethod.GET)
      public void getImageAsByteArray(@PathVariable String imgName , HttpServletResponse response) throws IOException {
          InputStream in = servletContext.getResourceAsStream("/WEB-INF/images/" + imgName);
          response.setContentType(MediaType.IMAGE_JPEG_VALUE);
          IOUtils.copy(in, response.getOutputStream());
      }
      

      上面的示例提供了一个图像文件。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-08
        相关资源
        最近更新 更多