我现阶段在不在互联网上的本地PC上运行grails版本2.3.3。
我正在构建一个多文件上传过程,而我正在拥有只能被描述为“瞬态”的过程。用这个行为。
通过瞬态我的意思是它已经正常工作了一段时间,成功地重复上传文件,然后在没有更改任何代码的情况下开始一直失败。
错误是:
错误500:内部服务器错误 URI / VidPlay /文件上传/ saveMK 类 groovy.lang.MissingMethodException 信息 没有方法签名:org.apache.catalina.core.ApplicationHttpRequest.getFileNames()适用于参数类型:()values:[]可能的解决方案: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上执行所有操作时,我可以看到这是一个非常人为的环境,本地计算机同时充当客户端和服务器。这使我认为我的问题是某种机器或OS资源限制问题。
或者,也许有一种更简洁的方法可以将文件信息从上传表单中获取到操作中?
注意 - 这种奇怪的行为发生在两个独立的应用程序中 - 我首先将这个文件上传系统引入了一个开发应用程序,它在一段时间内正常工作,然后开始一直失败,上面引用了相同的错误。
欢迎任何建议 - 提前感谢。
-Mike