JIRA插件后台文件上传异常:Servlet无法获取请求Part
解决JIRA插件Multipart Servlet无法获取上传部件的问题
Hey,我仔细看了你的代码和配置,一下子就抓住了核心问题——你依赖的Servlet API版本太低了,这直接导致@MultipartConfig注解完全没起作用!
1. 先修复Servlet API依赖
你pom.xml里用的是servlet-api 2.4,但@MultipartConfig是Servlet 3.0才引入的特性。JIRA 7.7.1本身是基于Servlet 3.0的,所以把依赖改成这个:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>
注意artifactId换成了javax.servlet-api,这是Java EE规范统一后的正确坐标,老的servlet-api已经被弃用了。
2. 可选:优化@MultipartConfig配置
如果你的规则文件可能比较大,建议给注解加上参数,避免默认大小限制导致上传失败:
@MultipartConfig( fileSizeThreshold = 2 * 1024 * 1024, // 2MB(文件超过这个大小会写到磁盘) maxFileSize = 10 * 1024 * 1024, // 单个文件最大10MB maxRequestSize = 50 * 1024 * 1024 // 整个请求最大50MB )
3. 排查前端表单的小细节
虽然你的VM模板看起来没问题,但还是可以用浏览器开发者工具确认下:
- 提交表单时,Network标签里的请求头
Content-Type是不是multipart/form-data; boundary=xxx - 查看Form Data里有没有
file部件、uploading和test参数,确认请求体不是空的
4. 调试小技巧
在doPost里加一行日志,看看请求体的长度:
LOG.debug("Request content length: " + request.getContentLength());
如果长度是0,那说明前端提交有问题;如果长度正常但getParts()还是空,那肯定是Servlet版本的问题没解决。
额外提醒:JIRA的请求链
JIRA有自己的请求处理过滤器,不过只要你用对了Servlet 3.0依赖和注解,就不会被拦截导致解析失败。我之前在JIRA插件里遇到过一模一样的问题,换了Servlet版本就搞定了!
内容的提问来源于stack exchange,提问作者Leib
相关产品推荐
相关产品推荐

