Java Play Framework 2.0中的文件大小限制

Java Play Framework 2.0中的文件大小限制,java,scala,file-upload,playframework,playframework-2.0,Java,Scala,File Upload,Playframework,Playframework 2.0,我正在尝试检查播放应用程序(2.0.3)中上载的文件的大小 我尝试了Scala和Java控制器,但每次我都有同样的奇怪行为。。。我设法检测到文件太大,但当我尝试返回响应时,请求将永远挂起,用户不知道请求无效 在Java中: @BodyParser.Of(value = BodyParser.MultipartFormData.class, maxLength = 10 * 1024 * 1024) pulic static Result upload() { if(request().bod

我正在尝试检查播放应用程序(2.0.3)中上载的文件的大小

我尝试了Scala和Java控制器,但每次我都有同样的奇怪行为。。。我设法检测到文件太大,但当我尝试返回响应时,请求将永远挂起,用户不知道请求无效

在Java中:

@BodyParser.Of(value = BodyParser.MultipartFormData.class, maxLength = 10 * 1024 * 1024)
pulic static Result upload() {
  if(request().body().isMaxSizeExceeded()) {
    return badRequest("Too much data!"); // this is not returned
  } else {
    ok("Got body: " + request().body().asText()); 
  }
}
在Scala中:

def upload = Action(parse.maxLength(10 * 1024 * 1024, parse.multipartFormData)) { request =>
    request.body match {
        case Left(MaxSizeExceeded(length)) => {
            Logger.error("MaxSizeExceeded")
            BadRequest("Your file is too large, we accept just " + length + " bytes!")
        }
        case Right(multipartForm) => {
            // Do stuff to handle the file
        }
    }
}
HTML模板:

@(httpPath: java.lang.String) @main(httpPath) {

    @helper.form(action = routes.Application.upload(), 'enctype -> "multipart/form-data", 'class -> "form-horizontal", 'id -> "form") {

        <div id="well" class="well">

                <h1>Upload</h1>
                <div id="formGroup" class="control-group">
                    <label class="control-label" for="file">Select file : </label>
                    <div class="controls">
                        <input id="file" name="file" type="file" style="display: none" /> 

                        <div class="input-append">
                            <input id="txtFile" type="text" class="required" readonly="true"/>
                            <span class="btn" onclick="$('#file').click();">Browse</span>
                        </div>

                        <script type="text/javascript">
                             $('#file').change(function() { 
                                 $('#txtFile').val($(this).val()); 
                             }); 
                         </script>
                    </div>
                </div>

                <button id="submit" type="submit" class="btn btn-primary" >Upload</button>
        </div>
    }
}
我看到其他开发人员也面临同样的问题(例如)。 这是2.0.x中的已知问题吗?我做错什么了吗


谢谢

通过将Play版本升级到2.2.1,问题消失了

我尝试了最近发布的2.0.x版本(2.0.8),但该错误仍然存在


显然,它已在2.1.x中修复。

您能否在Play 2.2.x中尝试您的代码,看看它是否在那里工作?这将告诉我们,这是否是一个问题,已被修复,因为播放2.0.x。我已经尝试与2.0.8,但同样的问题。不幸的是,我必须为这个应用程序使用2.0.x版本,但无论如何我都要尝试。即使在2.2.1中,请求也会挂起。当文件太大并且你想终止请求时,什么是结束请求的正确方法?你能显示你的视图模板(html文件)吗?我刚刚用模板编辑了这个问题
2014-04-30 16:46:44,791 - [[trace]] - play - New I/O  worker #4 - Serving this request with: Action(parser=BodyParser(maxLength=1048576, wrapping=BodyParser(multipartFormData))) -
2014-04-30 16:46:44,996 - [[trace]] - play - play-akka.actor.promises-dispatcher-60 - Invoking action with request: POST /upload -
2014-04-30 16:46:44,998 - [[error]] - application - play-akka.actor.actions-dispatcher-10 - MaxSizeExceeded java -
2014-04-30 16:46:44,999 - [[trace]] - play - play-akka.actor.actions-dispatcher-10 - Sending simple result: SimpleResult(400, Map(Content-Type -> text/plain; charset=utf-8, Set-Cookie -> )) -