问题背景:
老项目升级用spring boot,直接弃用struts2的话需要花费不少时间,所以暂时继续用struts2。
问题描述:
接口接收不到文件类型参数(包括File、MultipartFile)
问题处理过程:
首先我仔细检查入参,参数名没问题,与action中参数一致,有get/set方法,Content-Type也是multipart/form-data。检查完入参后发现并无问题,接口请求后file仍然时null,这时去网上找看是否有相关的案例,然而并没有找到想要的结果(毕竟struts2已经很老了)。没有办法最后只能自己打断点摸索着看
可以看出,parameter中有其他参数,并没有file文件,但是点开parts后发现里面的数据很想上传的文件
到这里就知道文件在哪了,下面直接取文件就ok
HttpServletRequest request = ServletActionContext.getRequest();
Part part = request.getPart("file");// 获取上传的文件部分
String fileName = part.getSubmittedFileName();// 获取上传文件的文件名
InputStream inputStream = part.getInputStream();
下面时关于Part的相关解释:
在 Java Servlet 中,Part 是 Servlet 3.0 新增的接口,用于表示 HTTP 请求中的一个部分(part),通常是指上传的文件。通过 Part 接口,你可以方便地获取上传文件的相关信息和内容。
在 HttpServletRequest 对象中,通过 getPart(String name)
方法可以获取到指定名称的 Part 对象。一般情况下,上传文件的表单域名称会被指定为 "file" 或类似的名称。
下面是 Part 接口的一些常用方法:
String getName()
:获取 Part 的名称。String getSubmittedFileName()
:获取上传文件的文件名。long getSize()
:获取上传文件的大小。String getContentType()
:获取上传文件的 MIME 类型。InputStream getInputStream()
:获取上传文件内容的输入流,可以通过该输入流读取文件内容。
通过使用 Part 接口,你可以轻松地处理上传文件,并获取文件的各种属性和内容。在处理文件上传的 Servlet 中,通常会使用 Part 接口来获取上传的文件内容。
问题总结:
对于文件请求为什么不能直接映射到参数上,我也不太清楚,反正问题时解决了,希望知道这个问题的根本原因的大佬可以指点指点。