Grails上传文件没有方法getFile()的签名

MeI*_*eIr 4 grails file-upload

我正在实现带有输入字段和文件上传的简单表单.我去了教程:http://grails.org/Simple+Avatar+Uploader 和文档:http://grails.org/doc/2.0.x/guide/theWebLayer.html#uploadingFiles

但是文件上传似乎不起作用!为什么不起作用?有问题的解决方案吗?

问题:

没有方法签名:org.springframework.security.web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.getFile()适用于参数类型:(java.lang.String)values:[itemImage]可能的解决方案:getXML(),getPart(java .lang.String),getAt(java.lang.String),getAt(java.lang.String),getLocale(),getJSON().Stacktrace如下:消息:没有方法签名:org.springframework.security.web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.getFile()适用于参数类型:(java.lang.String)values:[itemImage]可能的解决方案:getXML( ),getPart(java.lang.String),getAt(java.lang.String),getAt(java.lang.String),getLocale(),getJSON()Line | 方法 - >> 14 | 保存在greatoffer.SellController $$ EOVmPG4d - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 195 | grails.plugin.cache.web.filter.PageFragmentCachingFilter中的doFilter 63 | grails.plugin.cache.web.filter.AbstractFilter中的doFilter 53 | grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter中的doFilter 49 | grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter中的doFilter 82 | grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter中的doFilter 895 | java.util.concurrent.ThreadPoolExecutor $ Worker |中的runTask 918 | 在''^ 662 |中运行 跑 ..在java.lang.Thread中

主要GSP:

<g:uploadForm action="save" method="POST">
    <fieldset class="form">
        <g:render template="form"/>
    </fieldset>
    <fieldset class="buttons">
        <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
    </fieldset>
</g:uploadForm>
Run Code Online (Sandbox Code Playgroud)

图片上传表格GSP的一部分:

<label for="images">
    <g:message code="item.images.label" default="Images" />
</label>

<input type="file" name="itemImage" />
Run Code Online (Sandbox Code Playgroud)

控制器:

import grails.plugin.springsecurity.annotation.Secured

@Secured('permitAll')
class SellController {

    def index() {
        render(view: "seller")
    }

    def save() {
        println "Here are params: ${params}";
        def f = request.getFile('itemImage')
        flash.message = message(code: 'default.created.message', args: [message(code: 'item.label', default: 'Item'), params.id])
        render(view: "seller")
    }
}
Run Code Online (Sandbox Code Playgroud)

der*_*rdc 5

根据堆栈跟踪中的类型,Spring Security @Secured注释将您的请求包装在SecurityContextHolderAwareRequestWrapper中.你需要得到MultipartHttpServletRequest来调用getFile我相信.

另外,在你的调试中这是params语句,你看到了itemImage吗?如果是这样,我实际上认为这可能很容易.

def file = params.itemImage
Run Code Online (Sandbox Code Playgroud)

更新:我赞成评论.当我开始打字时,他们不在那里.