You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Servlet 3.0无法获取上传文件真实文件名,求技术解决方案

问题排查与解决方案

让我来帮你一步步排查这个上传文件真实文件名返回null的问题:

1. 核心问题:Servlet获取Part的参数名错误

你在Servlet里写的是:

filePart = request.getPart("uploadImageForNewCustomerformId");

但这个参数名uploadImageForNewCustomerformId是表单的ID,而不是上传文件对应的参数名。看你的代码细节:

  • HTML文件输入框的name属性是file:<input id="fileInput" type="file" name = "file">
  • JS里FormData追加的参数名也是file:formData.append("file", fileList[i], fileList[i].name)

所以你必须把获取Part的代码改成:

filePart = request.getPart("file");

如果需要支持多文件上传,建议用request.getParts()遍历所有Part,筛选出name为file的项进行处理。

2. 优化文件名获取逻辑(更可靠)

你自己实现的getFileName方法依赖手动解析content-disposition请求头,容易因为不同浏览器的头格式差异出问题。而你使用的WildFly 8.2支持Servlet 3.1规范,Part接口已经提供了getSubmittedFileName()方法,它会直接返回客户端上传的真实文件名,不用自己手动解析:

String fileNamer = filePart.getSubmittedFileName();

这个方法是官方标准实现,能避免手动解析头信息带来的各种潜在问题。

3. 额外检查点

  • 确认JS中的fileList变量正确获取到了用户选择的文件:比如在previewFile函数里是否正确把选中的文件赋值给了fileList,如果fileList为空,FormData里就没有文件数据,Servlet获取到的Part可能为空或没有文件名信息。
  • 确保@MultipartConfig注解配置正常(你已经添加了注解,不过可以确认下是否需要根据业务需求指定文件大小限制等参数,这不是当前问题的直接原因,但会影响后续上传逻辑)。

测试建议

修改Servlet的Part获取代码后,先打印filePart是否为null,如果不为null,再用getSubmittedFileName()获取文件名,应该就能得到正确的结果了。

内容的提问来源于stack exchange,提问作者Alex Mi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:45:15