返回顶部
首页 > 资讯 > 精选 >解决springboot 获取form-data里的file文件的问题
  • 629
分享到

解决springboot 获取form-data里的file文件的问题

springbootform-datadat 2023-05-31 09:05:28 629人浏览 薄情痞子
摘要

解决springboot 获取form-data里的file文件的问题前言:这两天用 SpringBoot 和同事的 iOS 客户端上传文件对接。在客户端他使用的是 afnetworking 第三方库。我使用的是 springboot 集成

解决springboot 获取form-data里的file文件的问题

前言:

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

下图是 postman 模拟上传时候的断点跟踪:

 解决springboot 获取form-data里的file文件的问题

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

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

 private static final String CONTENT_DISPOSITION = "content-disposition";private static final String FILENAME_KEY = "filename=";private static final String FILENAME_WITH_CHARSET_KEY = "filename*=";private void parseRequest(HttpServletRequest request) {  try {    Collection<Part> parts = request.getParts();    this.multipartParameterNames = new LinkedHashSet<String>(parts.size());    MultiValueMap<String, MultipartFile> files = new LinkedMultiValueMap<String, MultipartFile>(parts.size());    for (Part part : parts) {      String disposition = part.getHeader(CONTENT_DISPOSITION);      String filename = extractFilename(disposition);      if (filename == null) {        filename = extractFilenameWithCharset(disposition);      }      if (filename != null) {        files.add(part.getName(), new StandardMultipartFile(part, filename));      } else {        this.multipartParameterNames.add(part.getName());      }    }    setMultipartFiles(files);  }    catch (Throwable ex) {      throw new MultipartException("Could not parse multipart servlet request", ex);    }  }private String extractFilename(String contentDisposition) {  return extractFilename(contentDisposition, FILENAME_KEY);}

--结束END--

本文标题: 解决springboot 获取form-data里的file文件的问题

本文链接: https://www.lsjlt.com/news/224568.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作