HttpChannelOverHttp关闭后Jetty数据过多

HttpChannelOverHttp关闭后Jetty数据过多,jetty,Jetty,我上传一个大于10秒的音频文件时遇到问题,并出现以下错误: WARN:oejh.HttpParser:qtp1359061041-19: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@7fd0cbe{r=5,a=IDLE,uri=-} 如果我上传音频文件,这听起来像是这里讨论的类似问题 你是怎么开始杰蒂的?日志信息从命令行发送到STOUT吗?如果是这

我上传一个大于10秒的音频文件时遇到问题,并出现以下错误:

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

如果我上传音频文件,这听起来像是这里讨论的类似问题


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

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


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

我使用的是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;
为什么jetty在关闭后不断给我
太多数据(我会尽力解释)。在执行另一个连接和请求后,必须关闭连接。例如,我的上传一直重复使用相同的请求,请求溢出并给我消息。所以基本上,对于每个请求,必须关闭并打开新的请求

为了预防起见,我在
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>

在我的例子中,客户端发送的表单密钥比服务器允许接收的数量多

所以,我不得不设置

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

在jetty服务器端。

对于谷歌,我遇到了这个问题,通过将参数注释从
@FormParam
更改为
@FormDataParam
,解决了这个问题:

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

我在Heroku上运行,偶然发现了解决方案,发现了以下文档:

上面说:

此注释与媒体类型“多部分/表单数据”一起用于提交和使用包含文件、非ASCII数据和二进制数据的表单


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

我正在启动服务器
java-jar start.jar
尝试将其作为一个进程运行,或者将标准重定向到/dev/null(假设linux)。它对我不起作用,我正在以小于1mb的15秒的速度传递文件,但仍然给出相同的错误。我正在运行一个rest服务,它使用上述命令在Jetty上接受数据。我可以轻松上传100MB。文件上载到哪里?在我的本地文件夹中运行Jetty的应用程序(我假设它是你的应用程序)可能是错误的:
/home/ubuntu/fileupload
,但是当显示这个错误时,它确实是随机的,有15秒的音频,有时有效,有时无效。实际上,我说的是错误的。它没有在我的rest服务上调用任何方法。
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response post(
        @FormDataParam("name") String name,
        @FormDataParam("file") InputStream file) {
    //...
}