【发布时间】:2018-07-02 19:15:32
【问题描述】:
问题陈述
我认为标题说明了一切:我正在寻找解析包含 multipart/form-data HTTP 请求正文部分的 String 的方法。 IE。字符串的内容看起来像这样:
--xyzseparator-blah
Content-Disposition: form-data; name="param1"
hello, world
--xyzseparator-blah
Content-Disposition: form-data; name="param2"
42
--xyzseparator-blah
Content-Disposition: form-data; name="param3"
blah, blah, blah
--xyzseparator-blah--
我希望获得的是parameters 地图,或者类似的东西,像这样。
parameters.get("param1"); // returns "hello, world"
parameters.get("param2"); // returns "42"
parameters.get("param3"); // returns "blah, blah, blah"
parameters.keys(); // returns ["param1", "param2", "param3"]
更多标准
- 最好不必提供分隔符(即在这种情况下为
xyzseparator-blah),但如果必须,我可以忍受。 - 我正在寻找基于库的解决方案,可能来自主流库(如“Apache Commons”或类似的东西)。
- 我想避免滚动自己的解决方案,但在当前阶段,恐怕我不得不这样做。原因:虽然上面的示例通过一些字符串操作来拆分/解析似乎微不足道,但真正的多部分请求主体可以有更多的标头。除此之外,我不想重新发明(更不用说重新测试!)轮子:)
替代解决方案
如果存在满足上述标准的解决方案,但其输入是 Apache HttpRequest,而不是 String,那也是可以接受的。
(基本上我确实收到了HttpRequest,但是我使用的内部库是这样构建的,它将这个请求的主体提取为字符串,并将其传递给负责进行解析的类。但是,如果需要,我也可以直接在HttpRequest 上工作。)
相关问题
无论我如何尝试通过 Google、在 SO 和其他论坛上找到答案,解决方案似乎总是使用 commons fileupload 来浏览各个部分。例如:here、here、here、here、here...
但是,该解决方案中使用的parseRequest 方法需要RequestContext,而我没有(只有HttpRequest)。
上述一些答案中也提到了另一种方法,即从HttpServletRequest 获取参数(但同样,我只有HttpRequest)。
编辑:换句话说:我可以包含 Commons Fileupload(我可以访问它),但这对我没有帮助,因为我有一个 HttpRequest , Commons Fileupload 需要RequestContext。 (除非有一种简单的方法可以将HttpRequest 转换为RequestContext,我忽略了这一点。)
【问题讨论】:
-
你能改变内容类型标题吗?如果是这样 - @BalusC 可能会让你在这里 Convenient way to parse incoming multipart form data parameters in a servlet
-
@Andreas:你能详细说明一下吗?我简要检查了 API,但我并没有真正看到会解析请求的类。另外,不清楚如何从
HttpRequest... -
@JGlass:是的,我看到了那个答案(第一个“这里”链接是下面的答案!),但正如我所说,我没有
HttpServletRequest,所以它没有帮助我。 -
你有什么框架做?在没有至少一个已经在使用的主要 Web 框架的情况下解析这种输入感觉有点不合理。
标签: java apache http multipart