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. 【转】WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...

  2. k-means算法及matlab实现

    K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢?  ...

  3. 常用Javascript函数与原型功能收藏

    // 重复字符串 String.prototype.repeat = function(n) { return new Array(n+1).join(this); } // 替换全部 String. ...

  4. perl 函数的参数列表

    在perl中,定义一个函数的时候,不需要在圆括号内指定具体的参数,所有的参数都从@_ 这个列表中得到 代码示例: sub test { my ($a, $b) = @_; print qq{$a\t$ ...

  5. Python如何输出包含在对象中的中文字符?

    >>> bb = {'classes': ['\xe5\xb0\x96\xe6\xa4\x92\xe5\x9c\x9f\xe8\xb1\x86\xe4\xb8\x9d', '\xe5 ...

  6. openstack热迁移和冷迁移

    转自: http://www.cnblogs.com/pycode/p/6494848.html 迁移类型: *非在线迁移 (有时也称之为‘迁移’).也就是在迁移到另外的计算节点时的这段时间虚拟机实例 ...

  7. struts2的零配置

    最近开始关注struts2的新特性,从这个版本开始,Struts开始使用convention-plugin代替codebehind-plugin来实现struts的零配置.配置文件精简了,的确是简便了 ...

  8. jQuery操作属性和样式详解

    我们可以使用 javascript 中的getAttribute和setAttribute来操作元素的"元素属性".在 jQuery 中给你提供了attr()包装集函数, 能够同时 ...

  9. ASP.NET自带对象JSON字符串与实体类的转换

    关于JSON的更多介绍,请各位自行google了解!如果要我写的话,我也是去Google后copy!嘿嘿,一直以来很想学习json,大量的找资料和写demo,总算有点了解! 切入正题! 还是先封装一个 ...

  10. ChemDraw 16最新版本发布 更效率科研的首选

    ChemDraw一直是全球领先的科学绘图软件,致力于为科学家.教师以及学生提供最新的智能应用程序.ChemDraw 16版本相较于15版本做出了较大的改进,大大缩短科研时间,提高科研效率.扩展Name ...