对象存储oss使用问题之进行文件上传时报错java.io.EOFException如何解决

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。

问题一:在使用阿里云OSS进行文件上传时,报java.io.EOFException


在使用阿里云OSS进行文件上传时,报java.io.EOFException,想请问下该如何解决

报错日志如下

```[Client]Unable to execute HTTP request: java.io.EOFException

com.aliyun.oss.ClientException: java.io.EOFException

at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:74)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:142)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:135)
at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:71)
at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:124)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:182)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:143)
at com.aliyun.oss.internal.OSSObjectOperation.writeObjectInternal(OSSObjectOperation.java:1195)
at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:130)
at com.aliyun.oss.OSSClient.putObject(OSSClient.java:568)
at com.aliyun.oss.OSSClient.putObject(OSSClient.java:552)
at com.aliyun.oss.OSSClient.putObject(OSSClient.java:546)
at com.ztac.forward.common.util.OssUtils.uploadFirmWareFile(OssUtils.java:43)
at com.ztac.forward.service.impl.ForwardServiceImpl.forwardOss(ForwardServiceImpl.java:26)
at com.ztac.forward.control.ForwardController.forwardOSS(ForwardController.java:56)
at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:684)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

Caused by: org.apache.catalina.connector.ClientAbortException: java.io.EOFException

at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:321)

at org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:599)

at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:339)

at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:132)


参考回答:

楼主你好,EOFException通常表示读取数据时已经到达流的末尾,这可能是因为您的数据流被截断或其他网络问题导致的。

解决办法:

  1. 检查上传的文件是否完整,或者是否受到了重命名或截断。
  2. 确保您的网络连接是稳定的,如果网络连接不稳定,可能会导致数据流被截断。
  3. 如果您使用的是阿里云提供的SDK,请更新到最新版本,可能已经修复了此问题。
  4. 如果问题仍然存在,请尝试使用其他方式上传文件,如FTP或SCP等。
  5. 如果网络问题仍然存在,您可以使用OSS提供的multipart upload API,它可以将大文件分成多个部分上传,以避免由于网络问题导致的数据流截断。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/543058


问题二:调用oss_put_object_from_buffer返回timeout was reached


现象:同一套代码和软件,部分区域的设备(目前的现象大概是10/200),200个设备中有10个左右的地方,在调用oss_put_object_from_buffer的时候返回timeout was reached,导致数据无法上传,并且有10秒的超时

阿里云服务器网址:oss-cn-zhangjiakou.aliyuncs.com

尝试的方法:

1.使用默认ping 命令尝试ping oss-cn-zhangjiakou.aliyuncs.com,通信正常

2.使用ping命令指定数据包大小,当字节数超过2kb的时候,提示通信失败

3.尝试访问公网,包括aliyun官网和baidu等,访问浏览下载文件均正常

参考以下链接:

http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/pdf/oss-sdk-cn-zh-2016-05-17.pdf

阿里云的官方文档中,第448页给出了以下错误说明

**报错:error:a timeout was reached

检查一下host的值,是否是类似于oss-cn-hangzhou.aliyuncs.com的值。这个是C SDK的一个已知

问题,会在后期版本修复。**

请问目前是否有解决该问题,若未解决,目前有什么方法可以规避这个错误?


参考回答:

出现"timeout was reached"错误可能是由于阿里云OSS SDK的已知问题导致的。根据阿里云官方文档中的说明,该问题会在后期版本中修复。

目前,你可以尝试以下方法来规避这个错误:

1、确保你的host值是正确的,应该类似于oss-cn-hangzhou.aliyuncs.com。

2、如果可能的话,尝试使用最新版本的阿里云OSS SDK,以确保你使用的是最新的修复版本。

3、检查你的代码,确保没有其他因素导致超时错误,比如网络连接问题或其他代码逻辑错误。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/525285


问题三:查看OSS文件提示You have no right to access this object because of bucket acl

 

查看OSS文件提示You have no right to access this object because of bucket acl。


参考回答:

可能是权限不对,是用公网访问的文件吗

可以参考文档

Bucket ACL (aliyun.com)


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/502418


问题四:使用OSS SDK在开发板上进行上传下载时遇到错误RequestTimeTooSkewed

 

硬件及系统: 主MUC架构:armv7 内核版本:linux 4.9.84。

Background:正常使用oss SDK一段时间后,新的需求要求升级openssl1.0.2o -> 1.1.1f,导致其相应的依赖curl7.79.1及oss SDK也进行了重新编译。

问题描述:新的SDK在进行下载时遇到了这个问题,但使用date -u -R以及apr_time_now() 校验本地时间未发现异常。

于是写了一个上传sample去抓response body 发现requestTime时间异常。若不保持sdk运行且多次请求响应体的请求时间依旧保持一个定值。

相应时间改变请求时间仍为定值

但如果重新运行SDK的话,requestTime会变成另一个定值


参考回答:

已解决

给交叉编译的朋友们提供一个参考

由于之前编译了x86与arm不同架构的SDK,修改过oss的CMakeList。

在交叉编译时,务必要在CMakeList的开头指定交叉编译的Toolchain!否则会使用默认的编译器,导致链接apr库时,可能会链接到一些其他版本的apr。

【由此导致OSS依赖的apr_time_now()获取时间出现错误,OSS处理Http请求头的Date的业务在这(从oss_do_get_object_to_file追到这追了好一会呢...)】

同时自己的SDK依赖了正确的apr库,所以自己调用apr_time_now()打印的时间却是正确的。导致先入为主的认为apr库是没有问题的,使得问题变的很迷惑= =


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/585758


问题五:在使用OSS上传文件时,报了网络连接错误Connection pool shut down


具体错误显示为

Request processing failed: com.aliyun.oss.ClientException: 网络连接错误,详细信息:Connection pool shut down


参考回答:

Connection pool shut down

Caused by: java.lang.IllegalStateException: Connection pool shut down

at org.apache.http.util.Asserts.check(Asserts.java:34)

at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:184)

at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:251)

at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:175)

at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)

at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)

at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)

at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:124)

at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:133)

... 8 more

错误原因

调用ossClient.shutdown()接口后,还继续通过ossClient发送请求。

解决方法

请检查调用逻辑,确保调用了ossClient.shutdown()接口之后,不再通过ossClient发送请求。

https://help.aliyun.com/zh/oss/developer-reference/faq-3?spm=a2c4g.11186623.0.i32


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/568668

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
60 1
|
1月前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
438 1
|
1月前
|
Java
java 文件上传和下载
java 文件上传和下载
21 0
|
4月前
|
Java
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
169 9
|
4月前
|
缓存 前端开发 Java
在Java项目中实现高性能的文件上传下载
在Java项目中实现高性能的文件上传下载
|
4月前
|
前端开发 安全 Java
如何在Java中实现高效率的文件上传和下载
如何在Java中实现高效率的文件上传和下载
|
5月前
|
存储 Java Maven
大事件后端项目31--------文件上传_阿里云OSS_入门程序
大事件后端项目31--------文件上传_阿里云OSS_入门程序
|
5月前
|
存储 运维 Java
大事件后端项目30------文件上传_阿里云OSS_准备工作
大事件后端项目30------文件上传_阿里云OSS_准备工作
|
5月前
|
Java 对象存储
java对接阿里云OSS上传
java对接阿里云OSS上传
377 2
|
4月前
|
缓存 安全 Java
使用Java实现高性能的文件上传下载服务
使用Java实现高性能的文件上传下载服务

热门文章

最新文章

相关产品

  • 对象存储