当我打开Grails应用程序的上传页面时,我继续收到此错误消息:
No signature of method: org.apache.catalina.core.ApplicationHttpRequest.getFile()
is applicable for argument types: (java.lang.String) values: [file]
Possible solutions: getXML(), getPart(java.lang.String), getAt(java.lang.String),
getAt(java.lang.String), getLocale(), getInfo()
这是我的HTML代码:
<html>
<head>
<meta name="layout" content="main"/>
<title></title>
<style type="text/css">
label{
float:left;
width:65px;
}
</style>
</head>
<body>
<g:uploadForm action="upload">
<input type="file" name="file">
<g:submitButton name="upload" value="Upload"/>
</g:uploadForm>
</body>
</html>
和相应的控制器类
package org.example.test
class AdminAccessController {
def upload() {
def f = request.getFile('file')
def allLines= f.inputStream.toCsvReader().readAll()
}
}
我已尝试导入相当多的各种库来解决问题,但我还没弄清楚发生了什么。您可能会说,我最终会将此文件写入csv阅读器。我在官方Grails GitHub上完全遵循了这个文件:http://grails.github.io/grails-doc/latest/guide/theWebLayer.html#uploadingFiles,但似乎没有任何工作。
任何人都可以帮助我吗?
感谢。
答案 0 :(得分:1)
到达您的控制器的request
实例是ApplicationHttpRequest
,没有getFile
方法。
您需要将请求类型更改为DefaultMultipartHttpServletRequest
。
可以通过将enctype
中的uploadForm
更改为multipart/form-data
来完成此操作:
<g:uploadForm action="upload" enctype='multipart/form-data'>
<input type="file" name="file">
<g:submitButton name="upload" value="Upload"/>
</g:uploadForm>
答案 1 :(得分:-1)
忘了getFile()。你会收到类型MultiPartFile的参数,所以你可以使用它的实现:
params.file.getInputStream().toCsvReader().readAll()