java - isMaxSizeExceeded 时访问请求体

标签 java playframework multipartform-data playframework-2.1

我使用的是play 2.1.0,想要实现带有多个参数的文件上传,即multipart/form-data表单有一些小字段和文件本身。

如果我上传文件时不使用注释

@BodyParser.Of(value = BodyParser.MultipartFormData.class, maxLength = MAX_FILE_SIZE_B)

并检查文件大小,例如uploadedFile.length > MAX_SIZE 我可以访问请求正文,并且它始终不为空。

如果我使用注释,当 maxSizeExceeded ctx.request().body().asMultipartFormData() 为 null 时,即使我的小参数也会在浏览器发送的请求中首先出现。这是正确的行为吗?即使文件太大,有什么方法可以获取小参数吗?

第一种方式真的不好吗,因为大文件实际上会上传到服务器上?

最佳答案

此行为是预期的,因为 header 将包含文件大小,如果有效负载/文件大小超过 max_size 限制,服务器将不会接收文件并且连接将关闭。因此,您无法访问任何表单字段。相反,如果有帮助的话,请尝试将这些字段添加为请求 header 的一部分。

没有文档解释这一点,但这就是 http 层的处理方式。以下code可以解释一下,当有效负载超过限制时,它会用 body = null 包装对象。

为了回答您的问题,是的,第二种方法很好,可以帮助您的服务器不必要地接受大文件。

关于java - isMaxSizeExceeded 时访问请求体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15822948/

相关文章:

c# - 来自 C# 客户端的多部分表单

java - Apache http 客户端 : request does not get redirected

java - HttpServletRequest 重用

ubuntu - 如何在ubuntu中调用play-framework脚本?

playframework - Play 2 个模块 : how to add routes without tight coupling?

javascript - 获取多页/多部分表单中的所有 html 表单数据

java - 如何在 Scala 中实现返回用数组参数化的泛型类型的 Java 方法?

java - 确保字符串不超过给定长度的优雅方法

java - 尽管定义正确,但 Play 框架路由无法正常工作

java - 迁移到struts 2.3.24后,仍然不支持大于2GB的文件上传