PlayFramework 2.4.6错误413请求实体太大

Gle*_*eeb 17 multipartform-data netty playframework playframework-2.4

我正在使用PlayFramework 2.4.6,尝试上传多部分文件(大小为18M),服务器返回以下错误:

For request 'POST /api/myEndpoint' [Request Entity Too Large]
Run Code Online (Sandbox Code Playgroud)

我环顾四周,尝试了下面的成功:

  1. play.http.parser.maxMemoryBuffer = 2000000K
  2. parsers.MultipartFormData.maxLength = 1024000K
  3. play.http.parser.maxDiskBuffer = 2000000K
  4. Action.async(parse.anyContent(有些(1024*200L)))

而且他们都没有解决问题.

这是Stacktrace:

14:57:33.128 [New I/O worker #2] [error] -     p.c.server.netty.RequestBodyHandler - Exception caught in RequestBodyHandler
java.nio.channels.ClosedChannelException: null
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.setInterestOps(AbstractNioWorker.java:506) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioWorker$1.run(AbstractNioWorker.java:455) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.socket.ChannelRunnableWrapper.run(ChannelRunnableWrapper.java:40) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:391) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:315) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [netty-3.10.4.Final.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_65]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65]
Run Code Online (Sandbox Code Playgroud)

Gle*_*eeb 27

解决了这个问题:

play.http.parser.maxDiskBuffer = 100MB

parsers.anyContent.maxLength = 100MB
Run Code Online (Sandbox Code Playgroud)


jua*_*osl 21

我遇到了同样的问题,发送一个大表格并play.http.parser.maxMemoryBuffer=4MB解决了它.

  • 谢谢!这解决了我的错误. (3认同)
  • 我从格利布的回答中得到了两种选择,但没有任何帮助。这个对我有帮助。 (2认同)

cdm*_*kay 16

请参阅此文档有关内存和磁盘缓冲区的使用:https: //www.playframework.com/documentation/2.4.x/ScalaBodyParsers#Max-content-length

基于文本的正文解析器(例如text,json,xml或formUrlEncoded)使用最大内容长度,因为它们必须将所有内容加载到内存中.默认情况下,它们将解析的最大内容长度为100KB.可以通过play.http.parser.maxMemoryBuffer在application.conf中指定属性来覆盖它:

play.http.parser.maxMemoryBuffer=128K

对于缓冲磁盘上内容的解析器,例如原始解析器或multipart/form-data,使用该play.http.parser.maxDiskBuffer属性指定最大内容长度,默认为10MB.multipart/form-data解析器还为数据字段的聚合强制执行text max length属性.

因此,既然您正在尝试上传多部分文件,则需要将其增加到play.http.parser.maxDiskBuffer大于18MB的内容.

所以,将它添加到你的application.conf应该修复它:

play.http.parser.maxDiskBuffer=100MB
Run Code Online (Sandbox Code Playgroud)