【问题标题】:Access request body when isMaxSizeExceededisMaxSizeExceeded 时访问请求正文
【发布时间】:2013-04-04 22:38:42
【问题描述】:

我用的是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() 为空时,即使是我的小参数也会在浏览器发送的请求中排在第一位。这是正确的行为吗,即使文件太大,有什么方法可以获取小参数吗?

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

【问题讨论】:

  • 这种行为是预期的,因为一旦负载大小超过 max_size 限制,负载就会被丢弃。因此,您无法访问任何表单字段。如果有帮助,请尝试将这些字段添加为请求标头的一部分。抱歉回复晚了,迟到总比没有好:)。
  • @Sundar 您能否创建一个答案,我会接受。也非常感谢链接到源代码。

标签: java playframework multipartform-data playframework-2.1


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 2015-10-19
    • 2019-11-14
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2013-05-22
    相关资源
    最近更新 更多