解决springboot获取格式里的文件文件的问题

  

<>强解决springboot获取格式里的文件文件的问题

  

<强>前言:

  

这两天用springboot和同事的iOS客户端上传文件对接。在客户端他使用的是afnetworking第三方库。我使用的是springboot集成的StandardMultipartHttpServletRequest的解析方式。写好服务器端的接口以后,使用邮差模拟格式混合上传普通文本数据和文件文件是没问题的。后来再iOS端混合上传文本和文件的时候,发现multiPartFile解析不到文件。经过查看StandardMultipartHttpServletRequest的源文件,以及断点跟踪,发现在格式解析成部分的时候是没问题的,在遍历部分的时候就发现问题的所在了。

  

下图是邮递员模拟上传时候的断点跟踪:

  

, 解决springboot获取格式里的文件文件的问题

  

邮差模拟上传在途中的红框里可以发现在文件这个部分里面的content-dispostion这个关键对应的价值里面包含文件名=" Jitu .....“部分。而在普通的文本输入框对应的一部分部分是没这段值的。我用iOS客户端进行测试的时候发现文件上传的部分是缺少这段值的。

  

我们再来看StandardMultipartHttpServletRequest的一部分源码:

        私有静态最终字符串CONTENT_DISPOSITION=案郊印?   私有静态最终字符串FILENAME_KEY="文件名=";   私有静态最终字符串FILENAME_WITH_CHARSET_KEY="文件名*=";      私人空间parseRequest (HttpServletRequest请求){   尝试{   Collection部分=request.getParts ();   这一点。multipartParameterNames=new LinkedHashSet (parts.size ());   MultipartFile> MultiValueMap<字符串;文件=new LinkedMultiValueMap<字符串,MultipartFile> (parts.size ());   (部分:一部分部分){   字符串处理=part.getHeader (CONTENT_DISPOSITION);   字符串文件名=extractFilename(性格);   如果(文件名==null) {   文件名=extractFilenameWithCharset(性格);   }   如果(文件名!=null) {   files.add (part.getName()、新StandardMultipartFile(部分文件名));   其他}{   this.multipartParameterNames.add (part.getName ());   }   }   setMultipartFiles(文件);   }   抓住(Throwable特异){   把新的MultipartException(“不能解析多部分servlet请求”,例);   }   }      私人extractFilename字符串(字符串contentDisposition) {   返回extractFilename (contentDisposition FILENAME_KEY);   }      之前      

第一个方法是解析请求请求的,作用是将请求里面的格式表单数据分类解析为普通文本输入和文件输入,而第二个方法就是用来判断是否为文件的,其中第二个参数值就=是文件名,如果content-dispostion的值里包含这个值,则判断为文件,否则就是普通文本输入。看到这里就能明白为什么在跟iOS客户端联调的时候没把文件流解析成multipartFile。这时候只需要在客户端组装格式的时候需要加上文件名=xxx这部分值。

  

以上就是springboot获取格式里的文件文件的实例详解,如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

解决springboot获取格式里的文件文件的问题