问题一:在使用阿里云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通常表示读取数据时已经到达流的末尾,这可能是因为您的数据流被截断或其他网络问题导致的。
解决办法:
- 检查上传的文件是否完整,或者是否受到了重命名或截断。
- 确保您的网络连接是稳定的,如果网络连接不稳定,可能会导致数据流被截断。
- 如果您使用的是阿里云提供的SDK,请更新到最新版本,可能已经修复了此问题。
- 如果问题仍然存在,请尝试使用其他方式上传文件,如FTP或SCP等。
- 如果网络问题仍然存在,您可以使用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。
参考回答:
可能是权限不对,是用公网访问的文件吗
可以参考文档
关于本问题的更多回答可点击原文查看: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