当我尝试使用表单上传文档时,出现以下错误:
org.apache.commons.fileupload.FileUploadBase$IOFileUploadException:处理 multipart/form-data 请求失败。/temp/upload_37a45ff5_18dcebe4760__7ff4_00000073.tmp(没有此文件或目录)
ServletFileUpload.parseRequest(request) 失败,但堆栈跟踪未提供其他信息。这似乎只发生在大于 100kB 的文件上。
该目录存在且可读写,并且有足够的可用磁盘空间。我尝试增加 server.xml 中的最大文件大小,更新所有必要的 web.xml 文件以匹配此限制,还更新了 conf 目录中的连接器 maxPostSize - 但没有效果。
我正在使用 HTML 表单提交将请求从客户端发送到服务器。
仅当我在 Mac 或基于 Linux 的系统上运行 Tomcat 8 时才会发生此错误 - 如果我在 Windows 上运行它,则一切都按预期运行。我还尝试过运行全新安装的 Tomcat 8.5.78。最后,我还尝试将 commons.fileupload 包从 1.2.1 更新到 1.5 - 所有这些更改对结果都没有影响。
我完全不知所措,希望有人能指点我该怎么做,或者至少告诉我调试问题的最佳方法是什么。谢谢!
答案1
0
我设法修复了它,结果发现这是一个底层操作系统问题。默认情况下,Windows 有一个名为 temp 的目录,因此如果文件大于 100KB,应用程序将使用该临时目录将文件存储在那里,然后将其发送到服务器。
但是,在基于 Linux 的系统上,没有临时文件,只有 tmp,因此应用程序永远无法存储超过 100KB 的文件。我刚刚在机器的根目录中创建了该临时目录,并向所有用户授予了 rwx 权限,然后重新运行该应用程序,一切正常