当前位置: 首页 > 面试题库 >

从多部分请求中获取表单参数,而无需获取文件

窦英武
2023-03-14
问题内容

我正在寻找一种无需上传文件即可在Servlet过滤器中获取HTTP多部分请求的表单参数的方法。

request.getParameterMap()返回空。我了解这是因为请求包含多个部分。

我已经看过commons.HttpFileUpload,但是对于我的情况来说这似乎有些过分了。在此过滤器中,我仅对常规参数感兴趣,并且还不想处理文件上载。

编辑:主要问题是我需要在过滤器堆栈的下方有一个完整的HttpRequestObject。HttpFileUpload似乎消耗了部分请求数据(可能是通过使用数据流对象并再次将其关闭)。


问题答案:

这当然不是矫not过正,它是正确的方法,总是比自己编写解析器更好。在Apache的通用FileUpload开发并维护多年,证明了其在处理多/表单数据请求的鲁棒性。您不想重新发明轮子。如果您真的想这样做(我不建议这样做),请继续阅读multipart
/ form-
data规范,

然后开始阅读HttpServletRequest#getInputStream()(警告:这是二进制和字符数据的混合!)。

如果需要,您还可以编写一个过滤器,该过滤器在后台使用Apache Commons FileUpload并检查每个请求是否为multipart / form-
data,如果是,则在Commons
FileUpload和帮助下将参数放回请求参数映射中。将上载的文件(或异常)作为请求属性,以便最终在servlet代码中更加透明。您可以在这里找到一个基本的例子来理解。

希望这可以帮助。



 类似资料:
  • 我收到第三方对我的laravel post API的请求,其中包含两个表单数据(ID、文件)和标题(内容类型多部分/表单数据) 在laravel控制器中,在

  • 问题内容: 如何在Jinja2模板中检索请求参数? 问题答案: 我对这个答案有些迟,但是其他解决方案并不能真正解决你使用Flask的问题。 将Flask与Jinja2一起使用的事实使你的情况与其他框架有所不同。Flask实际上使所有Jinja2模板中都可以使用一些全局变量,而无需你将它们显式传递给模板。 在http://flask.pocoo.org/docs/templating/#standa

  • 主要内容:通过 HttpServletRequest 获取请求参数,通过形参获取请求参数,使用 @RequestParam 注解获取,通过实体类对象获取(推荐),解决获取请求参数的乱码问题Spring MVC 提供了多种获取请求参数的方式: 通过 HttpServletRequest 获取请求参数 通过控制器方法的形参获取请求参数 使用 @RequestParam 注解获取请求参数 通过实体类对象获取请求参数(推荐) 下面我们就对这些获取请求参数的方式一一进行介绍。 通过 HttpServlet

  • 问题内容: 我的问题是给定的代码: 我访问: 我应该期望[‘a’,’bbb’]的输出,除了Flask似乎只接受第一个参数而忽略其余参数。 这是Flask的限制吗?还是设计使然? 问题答案: 你可以使用与Django类似的,但由于某些原因,Flask文档中未提及: 结果是: 使用如果参数是查询字符串(如题),如果值来自具有相同名称的多个表单输入。 结合了两者,但通常应避免使用更具体的集合。

  • 我正在创建 Spring Boot Web 服务,我有一个模范员工 我想创建一个Get请求,它将根据用户给定的参数获取和过滤员工列表。 例如,如果用户提供员工的姓名和员工的指定,则 get 方法应筛选这些结果。对于各种参数组合,它应该可以工作。 为了避免多个if else情况,我根据上面的字符串和整数过滤列表。 我想我在下面的代码中犯了一个错误,该代码在控制器中发送请求。

  • 问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):