我正在使用Play 2.1.0,并希望使用多个参数实现文件上传,即multipart/form-data
表单有一些小字段和文件本身。
如果我上传文件而不使用注释
@BodyParser.Of(value = BodyParser.MultipartFormData.class, maxLength = MAX_FILE_SIZE_B)
并检查文件大小,如uploadedFile.length > MAX_SIZE
我可以访问请求正文,并且它一直不为null。
如果我正在使用注释,当maxSizeExceeded ctx.request().body().asMultipartFormData()
为null时,即使我的小参数在浏览器发送的请求中也是第一位的。这是正确的行为,是否有任何方法可以获得小参数甚至文件太大?
第一种方式是不是很糟糕,因为大文件实际上会上传到服务器上?
答案 0 :(得分:1)
行为是预期的,因为标头将包含文件大小,如果有效负载/文件大小超过max_size限制,服务器将不会收到文件,连接将被关闭。因此,您无法访问任何表单字段。而是尝试将这些字段添加为请求标头的一部分,如果有帮助的话。
没有文档可以解释这一点,但这就是在http层中处理它的方式。以下code可能会解释一下,当有效负载超过限制时,它使用body = null包装对象。
要回答您的问题,是的,第二种方法很好,可以帮助您的服务器不必要地接受大文件。