我尝试获取并解析从GSP视图发送上传的XML文件。 该文件由客户端正确发送,但当我尝试解析它时,我有一个例外。
------WebKitFormBoundaryPTpPKdL3WQWaPzJp--
*(The filename, directory name, or volume label syntax is incorrect). Stacktrace follows:
Message: ------WebKitFormBoundaryPTpPKdL3WQWaPzJp
Content-Disposition: form-data; name="file"; filename="myfile.xml"*
GSP:
<form enctype="multipart/form-data" method="post" action="uploadXml">
<input type="file" name="file" id="file" />
<input type="submit">
</form>
控制器:
def project = new XmlParser().parse(request.reader.text)
使用request.getFile('file')
:
MultipartFile file = request.getFile('file')
我有另一个例外:
*| Error 2015-03-30 09:46:41,328 [http-bio-8080-exec-5] ERROR errors.GrailsExceptionResolver - MissingMethodException occurred when processing request: [POST] /BOSWEBConfigurator/BOSOrder/uploadXml
No signature of method: org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.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(), getJSON(). Stacktrace follows:
Message: No signature of method: org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.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(), getJSON()*
答案 0 :(得分:0)
您可以使用XmlSlurpr(请参阅此问题Slurpr vs Parser)
在您的控制器中
def uploadXml() {
MultipartFile file = request.getFile('file')
GPathResult xml = new XmlSlurper().parse(file.inputStream)
}
然后你可以按照自己的意愿处理xml。
如果您愿意,可以使用g:uploadForm标记生成多部分表单。
确保您没有将此配置设置为true grails.web.disable.multipart = true
以下是您遇到的春季安全issue
答案 1 :(得分:0)
经过调查,我注意到我没有在 Config.groovy 中添加Spring Security静态规则:
grails.plugins.springsecurity.controllerAnnotations.staticRules = [
'myController/uploadXml' :['ROLE_ADMIN'']
]
现在它的工作