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. lambda小结

    新公司用Java8,所以搜了下文档,发现其主要是两个概念:Lambda表达式和函数式接口. Lambda是一段可执行的代码(类似匿名函数). Lambda的设计者们为了让Java现有的体系与Lambd ...

  2. Spring细粒度控制扫描Bean

    接Spring 依赖注入(DI)的注解 <context:component-scan base-package="" resource-pattern="**/* ...

  3. C++ STL 教程

    C++ STL 教程在前面的章节中,我们已经学习了 C++ 模板的概念.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的 ...

  4. 如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化

    DbConnection dbc = database.CreateConnection(); DbTransaction dbtt = null; try { dbc.Open(); dbtt = ...

  5. (转)windows平台时间函数性能比较QueryPerformanceCounter,GetTickCount,ftime,time,GetLocalTime,GetSystemTimeAsFileTime

    执行 10000000 次, 耗时 2258,369 微秒     QueryPerformanceCounter 执行 10000000 次, 耗时 26,347 微秒    GetTickCoun ...

  6. Linux配置防火墙,开启80port、3306port 可能会遇到的小问题

     vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(同意80端口通 ...

  7. Jquery实现上下移动和排序代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. js 去掉空格.回车.换行

    Jquery:$("#accuracy").val($("#accuracy").val().replace(/\ +/g,""));//去 ...

  9. Maven------使用maven新建web项目出现问题 项目名称出现红色交叉

    转载: http://wenda.so.com/q/1365963640069173?src=140 解决方法: problems窗口查看到下面错误java compiler level does n ...

  10. ios开发之--从相机或相册选取图片,并带删除操作的demo

    多选图片的一个效果,如下图: