记录文件上传问题:Java中的java.io.IOException: Broken pipe问题

上传文件报错,报错代码如下:

Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:468)
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:138)
at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:152)
at org.apache.tomcat.util.net.NioEndpoint N i o S o c k e t W r a p p e r . d o W r i t e ( N i o E n d p o i n t . j a v a : 1253 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . S o c k e t W r a p p e r B a s e . d o W r i t e ( S o c k e t W r a p p e r B a s e . j a v a : 764 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . S o c k e t W r a p p e r B a s e . w r i t e B l o c k i n g ( S o c k e t W r a p p e r B a s e . j a v a : 584 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . S o c k e t W r a p p e r B a s e . w r i t e ( S o c k e t W r a p p e r B a s e . j a v a : 528 ) a t o r g . a p a c h e . c o y o t e . h t t p 11. H t t p 11 O u t p u t B u f f e r NioSocketWrapper.doWrite(NioEndpoint.java:1253) at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:584) at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:528) at org.apache.coyote.http11.Http11OutputBuffer NioSocketWrapper.doWrite(NioEndpoint.java:1253)atorg.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764)atorg.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:584)atorg.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:528)atorg.apache.coyote.http11.Http11OutputBufferSocketOutputBuffer.doWrite(Http11OutputBuffer.java:546)
at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:73)
at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:193)
at org.apache.coyote.Response.doWrite(Response.java:601)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:339)
… 89 common frames omitted

然后也查了许多原因;说是磁盘空间满了;导致写文件失败。也确实如此。
虽然问题解决了,但问题最本质的原因并没有找到:
文件上传时会暂时放在服务器的磁盘缓存区;磁盘空间满了后,文件还能存入缓冲区吗?如果能的话为何不能取?文件上传都会经过磁盘缓存吗?什么情况不经过磁盘缓存?

情况说明:服务部署在linux服务器上;手机App上传文件到七牛云服务器。
按照我的理解是app上传文件到七牛云服务器;不应该是七牛云空间满了之后无法写入吗?为什么linux服务器磁盘满了也无法上传呢?
app选择文件是直接上传到七牛云了;首先jar服务要读取文件----->写入文件。那么究竟是jar服务读写文件还是jar服务所在的服务器读写文件呢?也就是jar所在的服务器承担了什么样的功能?
文件上传都会走磁盘缓存吗?

最终终结了一下(不对的地方大家互相指点交流)
jar服务读写文件;文件会放在缓冲区(服务器的磁盘缓存,磁盘空间满了导致无法写文件)。

大家可以看看这篇文章:文件上传原理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博客胡

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值