8

我正在尝试从 grails 网站模拟文件上传代码,但遇到了一些问题。我使用的代码与此处的代码相同。这是我的代码:

    <g:form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile" />
        <input type="submit" value="Upload" />
    </g:form>

def upload = {
    def f = request.getFile('myFile')
    if(!f.empty) {
      flash.message = 'success'
    }    
    else {
       flash.message = 'file cannot be empty'
    }
}

我在运行时收到以下错误:

Message: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}
Caused by: groovy.lang.MissingMethodException: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}

它似乎与一些 Spring 配置有关。Spring 似乎没有注入MultipartHttpServletRequest,所以我的请求没有合适的方法。我刚刚使用grails create-app. 我没有修改 resources.groovy 文件。我正在使用 grails 1.0.3。

任何帮助深表感谢。grails 网站使这看起来如此简单。

4

4 回答 4

12

问题解决了!

我使用示例代码将文件上传到 Grails 与原始作者可能的意图不同。问题是当调用控制器的上传方法时,有时是为了上传页面的原始渲染。该方法中的请求不是 MultipartHttpServletRequest 类型。当我对要上传的文件进行 POST 后,Spring 做了正确的事情并将我的请求更改为 MultipartHttpServletRequest。因此,在使用 MultipartHttpServletRequest 之类的请求之前,我需要对更新控制器方法进行简单检查。

if(request instanceof MultipartHttpServletRequest)
{
  MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;  
  CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myFile");
  if(!f.empty)
    flash.message = 'success'
  else
   flash.message = 'file cannot be empty'
}   
else
  flash.message = 'request is not of type MultipartHttpServletRequest'
于 2008-10-15T21:11:42.720 回答
5

现在使用 Grails 2.x 使用:

<g:uploadForm name="upload" action="upload" method="POST">
     <input type="file" name="file" />
</g:uploadForm>

def upload = {
    def file = request.getFile('file')
    assert file instanceof CommonsMultipartFile

    if(!file.empty){ //do something }
    else { //do something }
}

更干净,更简单。

于 2013-06-14T13:15:20.280 回答
4

确保您更新 html(您的 gsp 以及要从中上传的表单)以具有它们显示的enctype :

<g:form action="upload" method="post" enctype="multipart/form-data">

希望这很有帮助,似乎太明显了,但这是我看到您的错误消息后的第一个想法。

于 2008-10-15T20:19:31.483 回答
2

这里有人似乎遇到了和你一样的麻烦。他说他“修复”了它:

解决了。这是我的错误,我在提交表单之前进行了保存,所以我想没有文件。

不知道如何接受他所说的,但也许它会对你有所帮助。

于 2008-10-15T20:38:05.940 回答