【发布时间】:2014-11-02 08:49:11
【问题描述】:
我正在使用 Grails 2.4.3,我有一个 <g:uploadForm> 方法设置为发布,但我的控制器操作中没有收到 MutlipartRequest。相反,我得到了一个没有 getFile() 方法的 Servlet3SecurityContextHolderAwareRequestWrapper 。我尝试过强制转换,我尝试使用request.request 将请求从包装器中取出,并且我尝试了许多其他我看到的其他类似问题的建议,但仍然没有骰子。我确定我错过了一些简单的东西。我倾向于这样做,但如果有人能指出我正确的方向,我将不胜感激。
这是我的表格:
<g:uploadForm method="POST" action="uploadSupplemental" >
<div class="modal-header">
<h3 class="modal-title" id="myModalLabel">Upload Supplemental Data File</h3>
</div>
<div class="modal-body">
<label for="fileInput">Choose file to upload:</label>
<input type="file" id="fileInput" name="supplementalData" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<input type="submit" class="btn btn-primary" />
</div>
</g:uploadForm>
这是我的控制器操作:
def uploadSupplemental() {
MultipartRequest multipartRequest = request as MultipartRequest
def file = multipartRequest.getFile('supplementalData')
if (file){
flash.message = "File found!!"
} else {
flash.message = "File NOT found. :-( "
}
redirect action:'list'
}
这是我得到的错误:
URI /app/upload/upload 补充类 groovy.lang.MissingMethodException 消息没有方法签名: org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper.getFile() 适用于参数类型:(java.lang.String) 值: [supplementalData] 可能的解决方案:getXML(), getPart(java.lang.String), getAt(java.lang.String), getAt(java.lang.String), getLocale(), getJSON()
【问题讨论】:
-
更多信息:我第一次访问请求时,在我的控制器操作中,请求的类型为:org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper。如果我对此调用 getRequest(),我会得到一个 org.springframework.security.web.context.HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper。仍然是一个包装器,所以我调用 getRequest 并获得一个 org.springframework.security.web.firewall.RequestWrapper,另一个包装器。 (续...)
-
再调用一次 org.springframework.security.web.firewall.RequestWrapper.getRequest 给我一个 org.apache.catalina.core.ApplicationHttpRequest。所以我终于有了一个请求对象,但它不是应该的 MultipartRequest。还是被难住了。
-
Config.groovy中设置的grails.web.disable.multipart的值是多少?这是一个相关的JIRA issue 和一个duplicate question in SO 报告相同的异常。还要确保在上传操作之前对用户进行身份验证。控制器中使用@Secured是肯定的。 -
@dmahapatro,成功了。谢谢!你能把这个变成答案吗?
-
完成。很高兴挖掘很有帮助。 :)
标签: grails upload spring-security