我使用的是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/