我有一个关于文件上传的问题,它更多地与其工作方式有关,而不是代码问题。我在网上查了一下,但找不到合适的答案。
我有一个在 tomcat 上运行的 Web 应用程序,它处理文件上传(通过 servlet)。假设我现在想上传大文件(> 1 Gb)。我的理解是,一旦整个文件实际传输完毕,HTTP 请求的多部分内容就可以在我的 servlet 中使用。
我的问题是请求的内容实际存储在哪里?当调用 HttpServletRequest.getParts()
时,一个 InputStream
在 Part
对象上可用。但是,流从哪里读取? Tomcat 是否将其存储在某个地方?
我想这可能不够清楚,所以我会根据您的意见更新帖子,如果有的话。
谢谢
最佳答案
Tomcat 将 Part
存储在“X:\some\path\Tomcat 7.0\temp” (/some/path/apache-tomcat-7.0.x/temp) 目录中。
当解析多部分请求时,如果单个部分的大小超过阈值,则会为该部分创建一个临时文件。
当所有部分的传输完成后,您的 servlet/jsp 将被调用。
当请求被销毁时,所有临时文件也会被删除。
如果您对多部分解析阶段感兴趣,请查看 apache commons-fileupload(特别是 ServletFileUpload.parseRequest()
),tomcat 基于它的变体
更新
您可以将其配置为 java arg,即在 Windows 中:
关于java - 文件上传流从哪里获取内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242672/