Grails没有方法签名:org.apache.catalina.core.ApplicationHttpRequest.getFile()

时间:2015-07-07 21:06:21

标签: html grails groovy uploading

当我打开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,但似乎没有任何工作。

任何人都可以帮助我吗?

感谢。

2 个答案:

答案 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()