我正在尝试在Windows 10上使用Tomcat 8运行Grails 3.2 Web应用程序,其中涉及文件上传。该webApp可以正确启动,但是当我尝试远程上传任何文件时,我始终收到以下文件错误。请注意,在消息中有两个绝对路径被卡在一起,这将导致无效的文件规范。使用本地主机作为IP地址访问主机内部的应用程序时,没有出现此错误。任何帮助表示赞赏。
if (thisBuildIsProd) versionControl()
else dontVersionControl()
然后在服务器端,我在控制器中获取MultiPart文件对象,并调用tranferTo将其转换为普通文件
<g:uploadForm name="sstForm" controller="sstSetup" method="POST" >
<input id="w-mdf" type="file" name="wMDF" />
<div class="yui3-u-25-100" id="setup-submit">
<g:actionSubmit class="input block-page" name="submit" value="Submit" action="setupAction" onclick="return validateInput();"/>
<g:actionSubmit class="inputGrey block-page" name="cancel" value="Cancel" action="cancel"/>
</div>
</g:uploadForm>
这里没有什么复杂的。但是,当上传来自远程位置时,它将引发FileNotFoundException。
错误:java.io.FileNotFoundException: D:\ Users \ RWSK70 \ Documents \ Clark \ CIM \ Misc \ Drools \ DroolsIntelliJProject \ drools-app \ target \ classes \ rules \ C:\ Users \ RWSK70 \ Documents \ Clark \ !! \ CIM \ Misc \ Drools \ DroolsIntelliJProject \ drools-app \ src \ rules \ application \ 1233275_RSF_v243.txt (文件名,目录名称或卷标签语法不正确)
答案 0 :(得分:0)
我找到了问题。这是由于我处理上传的Multipart文件的方式引起的。 Servlet规范为客户提供了在调用multipart.getOriginalFilename()时返回文件名或文件绝对路径的空间。我做出了错误的假设,即客户端将始终根据经验返回简单的文件名。这是一个错误的假设。事实证明,在这种生产环境中,他们的浏览器正在发送文件的绝对路径,而不是应用程序期望的简单文件名,并且运行不正常。 – Felix Andrews 12月2日18:53