【问题标题】:Uploading large files error to wildfly向wildfly上传大文件错误
【发布时间】:2014-11-13 17:09:09
【问题描述】:

我尝试将大文件(400mb+)上传到wildfly 8.1,我得到一个IOException,但在使用jboss 7服务器时我没有遇到任何异常情况:

例外:

Blocking request failed HttpServerExchange{ POST /ehub/contentstore/categories/maincategory/file/create}: java.lang.RuntimeException: java.io.IOException: Broken pipe
    at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:527)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:287)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
    at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method) [rt.jar:1.7.0_51]
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) [rt.jar:1.7.0_51]
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) [rt.jar:1.7.0_51]
    at sun.nio.ch.IOUtil.write(IOUtil.java:51) [rt.jar:1.7.0_51]
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487) [rt.jar:1.7.0_51]
    at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:150) [xnio-nio-3.2.2.Final.jar:3.2.2.Final]
    at io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.java:212)
    at io.undertow.server.protocol.http.HttpResponseConduit.flush(HttpResponseConduit.java:629)
    at io.undertow.conduits.FinishableStreamSinkConduit.flush(FinishableStreamSinkConduit.java:83)
    at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
    at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:100)
    at org.xnio.channels.Channels.flushBlocking(Channels.java:63) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
    at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:625)
    at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:451)
    at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:525)

我增加了最大帖子大小,但没有用。

独立的.xml:

<subsystem xmlns="urn:jboss:domain:undertow:1.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" max-post-size="974247881"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
        </filters>
</subsystem>

【问题讨论】:

  • 感谢 Serhat,您解决了我的问题。我增加了最大帖子大小,这对我有帮助!

标签: rest file-upload wildfly large-file-upload


【解决方案1】:

我已经找到了解决方案。我有同样的问题,我解决了。它可能会帮助其他人。

为了允许更多的http请求头大小你需要改变jboss或wildfly的standalone.xml文件。

将 max-header-size 属性添加到默认服务器并重新启动服务器它将工作 Standalone.conf

<subsystem xmlns="urn:jboss:domain:undertow:1.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" max-header-size="974247881"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>
        </server>
...
</subsystem>

【讨论】:

  • official docs,max-post-size 默认为10MB(大小以字节为单位)
  • @Gregor 我在链接文档中看不到 max-post-size 的默认值。你在什么地方找到的吗?在这里也找不到:docs.jboss.org/author/display/WFLY/…
  • @VasilSvetoslavov 它仍然存在,在表格的“通用设置”下: > max-post-size 允许的传入帖子请求的最大大小。
  • @Gregor 该设置确实存在。我的意思是在任何地方都没有描述默认值。并不是说我对 10MB 不信任您,但我只是在文档中没有看到它。截图在这里(以防我们谈论不同的事情):pasteboard.co/Ibt17Ec.png
  • 你是对的@VasilSvetoslavov 我错过了。所以它至少记录在下面 M2E67 链接的问题中,不知道我最初是从哪里得到的。见issues.jboss.org/browse/UNDERTOW-185
【解决方案2】:

它不在“standalone.conf”文件中。它是位于文件夹“standalone/configuration”中的“standalone.xml”文件。 更改最大后尺寸:

<http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="104857600"/>
            <host name="default-host" alias="localhost">

【讨论】:

    【解决方案3】:

    在 jboss 中查看此链接:https://issues.jboss.org/browse/UNDERTOW-185

    将设置 ../wildfly/stanadalone/configuration/standalone.xml 中的 max-post-size。

    【讨论】:

      【解决方案4】:

      如果您的 wildfly 支持网络服务器,例如nginx,您可能必须在那里设置限制。这对我有帮助。

      【讨论】:

        【解决方案5】:

        使用 WildFly 网络控制台移动到: 配置 -> 子系统 -> Web(Undertow) -> 服务器 -> 默认服务器 点击“查看”按钮 移至“侦听器”选项卡 编辑“HTTP Listener”和“HTTPS Listener”参数“max-post-size”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-11
          • 1970-01-01
          • 2014-04-22
          • 2011-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多