【问题标题】:How to make Spring controller be called before all request body is transferred (and handle body as stream)?如何在传输所有请求主体之前调用 Spring 控制器(并将主体作为流处理)?
【发布时间】:2013-09-03 17:07:14
【问题描述】:

现在我正在尝试使用此代码上传部分大文件,但只有在整个文件传输后才调用方法(我猜是到 Spring 的临时位置)。我需要动态处理上传。是否有任何 Spring 参数允许更早地调用处理程序(并仅使用标头和流对其进行参数化)?

@RequestMapping(value = "uploadVideo", method = POST)
    public
    @ResponseBody
    String uploadVideo(InputStream stream,
                       @RequestHeader(value = "Range") String rangeHeader,
                       @RequestHeader("FileName") String fileName) {
// handle stream
}

【问题讨论】:

  • 你说的只有在整个文件传输之后是什么意思?
  • 客户端发送完内容后。
  • 客户端发送时不可能这样做。您的 servlet 容器具有从 HTTP 请求中读取字节的套接字实现。当所有这些字节都被读取时,它会为它们提供一个 InputStream 给你的 Spring 的 DispatcherServlet,然后它可以将它们传递给你的处理程序方法。
  • 好的..谢谢。你能建议我另一种可能的解决方案吗?我可以用什么代替 Spring 的控制器来操作流?
  • 为什么要在收到之前对流进行操作。这不太像 HTTP。

标签: java spring post spring-mvc stream


【解决方案1】:

不可能,servlet 容器总是缓存请求。现在要启用上传恢复,我将文件分割并与多个带有Range 标头的请求一起发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多