关闭HttpChannelOverHttp后Jetty太多数据了

时间:2014-03-19 15:13:18

标签: jetty

我在上传一个音频文件> 10s时遇到了麻烦,并给了我这个错误:

WARN:oejh.HttpParser:qtp1359061041-19: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@7fd0cbe{r=5,a=IDLE,uri=-}

如果我上传音频文件< 10s就可以了。

我在谷歌搜索,但我找不到任何解决方案。 对此有什么解决方案吗?

6 个答案:

答案 0 :(得分:1)

我使用的是Cordova 3.3.0,问题出在上传上。下面的代码解决了我的问题:

var options = new FileUploadOptions();
    options.fileKey="file";
    options.fileName=name;
    options.mimeType = "audio/amr";
    options.headers = {
        Connection: "close"
    }
    options.chunkedMode = false;

为什么码头继续给我too much data after closed(我会尽力解释)。在进行另一次连接和请求后必须关闭连接。例如,我的上传不断重复使用相同的请求并溢出请求并给我留言。所以基本上,对于每个请求,必须关闭并打开新的请求。

为了预防,我对jetty.xml

进行了更改
<Set name="outputBufferSize"><Property name="jetty.output.buffer.size" default="65536" /></Set>
<Set name="requestHeaderSize"><Property name="jetty.request.header.size" default="16384" /></Set>
<Set name="responseHeaderSize"><Property name="jetty.response.header.size" default="16384" /></Set>

答案 1 :(得分:0)

这听起来像是在这里讨论的类似问题http://dev.eclipse.org/mhonarc/lists/jetty-users/msg03919.html

你是如何开始码头的?是从日志信息转到STOUT的命令行吗?如果是这样,您可能需要将应用程序作为服务启动或将日志级别配置得更低。

答案 2 :(得分:0)

要从init.d运行服务器,请将脚本$ {JETTY_HOME} /bin/jetty.sh复制到/etc/init.d/文件夹(如果要在系统引导期间启动jetty)。确保脚本具有执行权限。像

一样运行脚本

sudo /etc/init.d/jetty start(我在/etc/init.d/文件夹中将jetty.sh复制为jetty)

答案 3 :(得分:0)

就我而言,客户端发送的表单密钥超过了允许服务器接收的数量。

所以我必须设置

WebAppContext webapp = new WebAppContext();
webapp.getServletContext().getContextHandler().setMaxFormKeys(1000000000);

在码头服务器端。

答案 4 :(得分:0)

对于Google员工,我遇到了此问题并通过将参数注释从@FormParam更改为@FormDataParam来解决此问题:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response post(
        @FormParam("name") String name,
        @FormParam("file") InputStream file) {
    //...
}

为:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response post(
        @FormDataParam("name") String name,
        @FormDataParam("file") InputStream file) {
    //...
}

我在Heroku上运行,并且偶然找到了解决方案,找到了以下文档:

其中说:

  

此注释与媒体类型“multipart / form-data”一起用于提交和使用包含文件,非ASCII数据和二进制数据的表单。

答案 5 :(得分:0)

对我来说问题是我没有从输入中读取。每次都没有触发错误,但是当输入超出一定大小时,就会发生这些错误。在写入输出流之前简单地完全读取输入流解决了我的问题。