如果在postman中设置了Context-type为multipart/form-data以及file设置,如下图:
而我的调用的上传方法仅仅只是用了@RequestMapping("/xxxx"),并且使用MutipartFile,如下图:
的时候,可能遇到的错误信息如下(报错信息看加粗与下划线部分就行了)
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: Missing initial multi part boundary
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:124)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:115)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:88)
Caused by: java.io.IOException: Missing initial multi part boundary
at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:613)
at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:482)
at org.eclipse.jetty.server.MultiParts$MultiPartsUtilParser.getParts(MultiParts.java:112)
at org.eclipse.jetty.server.Request.getParts(Request.java:2382)
at org.eclipse.jetty.server.Request.extractContentParameters(Request.java:529)
at org.eclipse.jetty.server.Request.getParameters(Request.java:430)
at org.eclipse.jetty.server.Request.getParameterMap(Request.java:1068)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:203)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:203)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:203)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:203)
at com.hsjry.channel.guard.biz.oauth2.filter.ParameterHttpServletRequest.getParameterMap(ParameterHttpServletRequest.java:47)
其实,从上面的错误信息们就可以看到,大概就是是说multipart少了对参数boundary的初始化,其实就是boundary这个参数没有给值。解决的方式其实很简单,只需要将Context-type的设置的值后边加上分号,再加上boundary=ebf9f03029db4c2799ae16b5428b06bd1,完整的就是multipart/form-data;boundary=ebf9f03029db4c2799ae16b5428b06bd1,boundary里的值你可以随便改,
或者设置成:
然后,这样你就可以成功上传文件了,当然postman中也可以下载文件,只需要点击"Send“右下角的小三角形,选择一下就可以了:
当然,有的人说啥post们中不需要指定Content-Type的值,说啥上传文件的时候会自动识别,反正我试过了,并不可行。这里如果不设置Content-Type的话,后台会报Current request is not a multipart request的异常。