文件到底什么时候传输到服务器?

When exactly are the files transmitted to the server?

如果我有一个处理文件上传的 servlet,服务器何时实际接收文件?

当我调用 HttpServletRequest::getParts 时它们是否已经可用,或者只有当我实际调用相应的 Part::write 时才会提取单个文件?

问题不同,我的 servlet 有责任实现所有文件的并行上游,还是我只需要担心将它们全部写入磁盘?

Are they already available when I invoke HttpServletRequest::getParts

是的。

or will the individual files only be fetched when I actually call the corresponding Part::write?

从技术上讲,不会提取文件。服务器实际上并不从客户端“下载”文件。客户端将文件作为请求主体的一部分发送到服务器,服务器只需侦听这些文件并将它们写入临时存储,然后再调用服务方法。服务器只会在请求主体被完全读取时调用服务方法。这与请求正文内容类型无关。因此,上一个问题的“是”。

Asked differently, is it my servlet's responsibility to implement a parallel upstream of all files

绝对不是。您根本不需要在 HttpServletRequest 上同步任何内容。顶多只在HttpSession,但连这个在这里都没有作用。

or do I just need to worry about writing them all to disk?

是的,正是这样。只需抓住 Part,验证它并最终写入它。

另请参阅:

  • Recommended way to save uploaded files in a servlet application