Grails:上传xml文件时的异常

时间:2015-03-30 07:27:07

标签: grails file-upload

我尝试获取并解析从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()*

2 个答案:

答案 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'']
]

现在它的工作