我在现阶段不在互联网上的本地 PC 上运行 grails 2.3.3 版。
我正在构建一个多文件上传过程,并且我的行为只能被描述为“瞬态”行为。
瞬态是指它已经正常工作了一段时间,重复成功上传文件,然后在我没有更改任何代码的情况下开始持续失败。
错误是:
错误 500:内部服务器错误 URI /VidPlay/fileUpload/saveMK 类 groovy.lang.MissingMethodException 消息没有方法签名:org.apache.catalina.core.ApplicationHttpRequest.getFileNames() 适用于参数类型:() 值:[]可能的解决方案:getHeaderNames()、getMimeTypes()
这是代码的概述 - 首先,上传表单的 html 是:
<g:uploadForm action="multiFileSave" name="mikeK">
<fieldset class="buttons">
<span class="pageHeader"><g:message code="Upload a New Picture" /></span>
<g:submitButton name="Save" onclick="fileUpload.selectButton()" class="buttons" value="${message(code: 'default.button.save.label', default: 'Save')}" />
</fieldset>
<tr class="prop">
<td valign="top" class="name">
<label class="uploadFile" for="payload">File:</label>
</td>
<td valign="top">
<input type="file" id="file" name="file[]" multiple/>
</td>
</tr>
</g:uploadForm>
这是处理上传或传输的控制器操作:
request.getFileNames().each{
log.debug( "getFileNames getFile: ")
//for( file in request.getFiles(it))
request.getFiles(it).each
{ file ->
// loop through all files selected
log.debug( "multiFileSave - name: $file.name Originalfilename: $file.originalFilename contentType: $file.contentType")
try{
file.transferTo( new File( userDir, file.getOriginalFilename()))
upFiles = upFiles + " " + file.originalFilename
def pictId = PicturesShr.findByName(file.originalFilename)
if(pictId) multiFileLst= multiFileLst + "|" + pictId.id
}
catch (Exception eWrite)
{
log.debug ("File Transfer error files: file.originalFilename Error: ${eWrite.toString()}")
flash.message = flash.message + "File Transfer error files: file.originalFilename Error: ${eWrite.toString()}"
failFiles = failFiles + " " + file.originalFilename
}
} // getFiles loop
} // getFileNames loop
当我在使用 Win 7.0 的本地 PC 上执行所有这些操作时,我可以看到这是一个非常人为的环境,本地计算机同时充当客户端和服务器。这让我认为我的问题是某种机器或操作系统资源限制问题。
或者,也许有一种更简洁的方法可以从上传表单中获取文件信息到操作中?
注意 - 这种奇怪的行为发生在两个单独的应用程序中 - 我首先将此文件上传系统引入开发应用程序,它可以正常工作一段时间,然后开始持续失败,并出现上面引用的相同错误。
欢迎任何建议 - 提前致谢。
-麦克风