2

我正在使用play 2.1.0 并且想用几个参数实现文件上传,即multipart/form-data表单有一些小字段和文件本身。

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

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

并检查文件大小,就像uploadedFile.length > MAX_SIZE我可以访问请求正文一样,它不是一直为空。

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

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

4

1 回答 1

1

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

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

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

于 2013-04-26T09:20:09.560 回答