应用系统上传附件操作,上传附件失败,v10企业版能正常上传,v9企业版上传附件失败
由 何 善才 在 大约一年 之前添加
异常信息:
日志无异常信息
解决:
文件上传分为两种情况,一种是应用服务器解析附件,另一种是应用解析附件。
应用服务器在调用getParameter和getPart的时候解析附件。getPart是显示解析附件,getParameter是隐式解析附件。一旦解析了附件或者判断不要解析就不会触发再次解析。
getParameter不会解析附件,除非配置了apusic.allowCasualMultipartParsing=true。
getPart强制解析附件不管是否配apusic.allowCasualMultipartParsing参数。
(1)应用需要自己解析附件或者通过Spring解析附件(配置了CommonsMultipartResolver),则AAS配置不解析附件(默认值为false)
<context-param>
<param-name>apusic.allowCasualMultipartParsing</param-name>
<param-value>false</param-value>
</context-param>
(2)应用通过调用request.getPart或者Spring使用标准的解析附件(StandardMultipartResolver),则AAS需要设置解析附件:
<context-param>
<param-name>apusic.allowCasualMultipartParsing</param-name>
<param-value>true</param-value>
</context-param>
(3)如果应用需要自己解析附件,先调用getParameter再调用request.getPart,则AAS需要设置禁用解析附件:
<context-param>
<param-name>apusic.allowCasualMultipartParsing</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>apusic.web.multipart.parse.disabled</param-name>
<param-value>true</param-value>
</context-param>
(4)如果应用需要自己解析附件,但先调用request.getPart,则应用或者AAS会抛异常,因为调用getPart就是要解析附件。
此项目的解决办法:
<context-param>
<param-name>apusic.allowCasualMultipartParsing</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>apusic.web.multipart.parse.disabled</param-name>
<param-value>true</param-value>
</context-param>