upload ClientException Read timed out 
com.aliyun.openservices.ClientException: Read timed out 
        at com.aliyun.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:19) 
        at com.aliyun.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:59) 
        at com.aliyun.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:176) 
        at com.aliyun.common.comm.ServiceClient.sendRequest(ServiceClient.java:136) 
        at com.aliyun.openservices.oss.internal.OSSOperation.send(OSSOperation.java:60) 
        at com.aliyun.openservices.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:76) 
        at com.aliyun.openservices.oss.OSSClient.putObject(OSSClient.java:303) 
        at com.ccp.ossbridge.Upload.upload(Upload.java:119) 
        at com.ccp.ossbridge.Upload.upload(Upload.java:73) 
        at com.ccp.core.controller.UploadController.uploadFile(UploadController.java:56) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
        at com.ccp.util.web.CcpBaseDispatcherServlet.doDispatch(CcpBaseDispatcherServlet.java:19) 
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:643) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) 
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) 
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
        at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.SocketTimeoutException: Read timed out 
        at java.net.SocketInputStream.socketRead0(Native Method) 
        at java.net.SocketInputStream.read(SocketInputStream.java:129) 
        at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149) 
        at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:111) 
        at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264) 
        at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98) 
        at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252) 
        at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:282) 
        at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247) 
        at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:216) 
        at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298) 
        at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) 
        at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:647) 
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464) 
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) 
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) 
        at com.aliyun.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:57) 
        ... 41 more

    public String uploadImg(String bucketName,String key, InputStream resources, long length , String contentType) {

        ObjectMetadata objectMeta = new ObjectMetadata();
objectMeta.setContentLength(length);
objectMeta.setContentType(contentType); PutObjectResult putObject = OSSclient.putObject(bucketName, key, resources, objectMeta);
return putObject.getETag();
}
 public String saveImgFileToAliyun(File avatarFile){

        contentType = "image/jpeg";
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream(avatarFile);
byte[] byteArrayFile = IOUtils.toByteArray(fileInputStream);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayFile);
String md5 = Md5Util.getMd5String(byteArrayFile);
// check if file exists
boolean isExists = checkIfFileExists("xxx", md5);
if (isExists) {
return md5;
}else{
String etag = uploadImg("xxx", md5,byteArrayInputStream,avatarFile.length(), contentType);
if (etag.equalsIgnoreCase(md5)) {
return etag;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
} public static byte[] input2byte(InputStream inStream)
throws IOException {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in2b = swapStream.toByteArray();
return in2b;
}
 当时由于调用 :byte[] byteArrayFile = IOUtils.toByteArray(fileInputStream); 
拿到byte数组去算md5的值,所以就调用了 input2byte方法,红色标红部分把文件流 fileInputStream 的offset指针,指到了文件的末尾. 因为我之前上传部分代码写得是: String etag = uploadImg("xxx", md5,fileInputStream,avatarFile.length(), contentType);
文件流指针在末尾,所以当上传时再次读取这个流对象 fileInputStream的时候文件没有读取到内容,直接导致了 read time out!
后来,解决的方法是再次用byte 数组创建一个流对象,并传递到uploadImg 方法中:
  ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayFile);

这问题昨天困扰我到凌晨1点半,第二天,去公司问同事李航人称航哥之后解决。在这里感谢下航哥!

aliyun oss 文件上传 java.net.SocketTimeoutException Read timed out 问题分析及解决的更多相关文章

  1. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  2. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  3. OSS文件上传及OSS与ODPS之间数据连通

    场景描述        有这样一种场景,用户在自建服务器上存有一定数量级的CSV格式业务数据,某一天用户了解到阿里云的OSS服务存储性价比高(嘿嘿,颜值高),于是想将CSV数据迁移到云上OSS中,并且 ...

  4. 记一次阿里云oss文件上传服务假死

    引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...

  5. PHP实现阿里云OSS文件上传(支持批量)

    上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下:   1.下载阿里云OSS对象上传SDK(P ...

  6. js实现oss文件上传及一些问题

    关于兼容性问题,ie8以下的可以使用4.x的版本 一.引入sdk和jq <script src="http://libs.baidu.com/jquery/2.0.0/jquery.m ...

  7. 前后端分离跨服务器文件上传-Java SpringMVC版

    近来工作上不上特别忙,加上对后台java了解一点,所以就抽时间,写了一个java版本的前后端分离的跨服务器文件上传功能,包括前后端代码. 一.Tomcat服务器部分 1.Tomcat服务器 单独复制一 ...

  8. IOS 多文件上传 Java web端(后台) 使用List<MultipartFile> 接收出现的问题

    先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee&qu ...

  9. php阿里云oss文件上传

    php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...

随机推荐

  1. VS2010 快捷键设置,快速编码1

    全屏:Shift+Alt+Enter注释选定内容:Ctrl+E+C/Crtr+E+U代码格式化:ctrl+E+F VS2008 使用小技巧——快捷键1. 怎样调整代码排版的格式?选择:编辑—>高 ...

  2. HDF5 文件格式简介

    三代测序下机的原始数据不再是fastq格式了,而是换成了hdf5 格式,在做三代数据的分析之前,有必要先搞清楚hdf5 这种文件格式; 官网的链接如下:https://support.hdfgroup ...

  3. win7cmd静态绑定arp

    netsh -c "172.16.3.1" "f4-ea-67-8b-91-cc"

  4. 做asp.net的在别人眼中都是渣渣吗?

    做asp.net的在别人眼中都是渣渣吗?

  5. u3d change terrain textrue&height

    using UnityEngine; using System.Collections; public class terrainTest : MonoBehaviour { ; private Te ...

  6. 使用mysqldump工具对数据库进行全备份

    需求描述: 通过mysqldump工具的--all-databases选项对所有数据库进行备份. 操作过程: 1.通过--all-databases选项对所有的数据库进行备份 [mysql@redha ...

  7. 如何调用别人发布的WebService程序

    这篇经验会告诉我们如何调用别人发布的WebService,并且需要注意的事项.现在就拿获取天气预报的接口举例,因为文中不允许有链接,所以在下文图中有WebService链接的地址. 工具/原料   V ...

  8. Android 6.0启动过程具体解析

    在之前的一篇文章中.从概念上学习了Andoird系统的启动过程.Android系统启动过程学习 而在这篇文章中,我们将从代码角度细致学习Android系统的启动过程,同一时候,学习Android启动过 ...

  9. simple fix 主从不一致滴error

    Last_SQL_Error: Error 'Unknown table 'bb'' on query. Default database: 'test'. Query: 'DROP TABLE `b ...

  10. 九度 1529:棋盘寻宝(递推DP)

    题目描述: 现在有一个8*8的棋盘,上面放着64个价值不等的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0小于1000),一个人的初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应 ...