• 使用OSS中的数据作为机器学习的训练样本
  • DataLakeAnalytics+OSS:基于OSS的Severless的交互式查询分析
  • 通过HDP2.6 Hadoop读取和写入OSS数据
  • 通过CDH5 Hadoop读取和写入OSS数据
  • Apache Impala(CDH6)查询OSS数据
  • Spark使用OSS Select加速数据查询
  • 基于OSS+MaxCompute构建数据仓库
  • 数据备份和容灾
  • 备份存储空间
  • 数据库备份到OSS
  • 通过云存储网关使用OSS服务
  • 本地共享文件夹访问
  • 本地磁盘访问
  • OSS上传提示Name or service not known报错
  • osscmd工具上传提示InvalidBucketName报错
  • 调用Callback时页面显示400 call back error
  • OSS服务.netSDK中使用MemoryStream上传文件为空的解决方法
  • OSS下载rar格式文件,打开后乱码
  • IE浏览器下载OSS文件后扩展名被省略
  • OSS支持FTP吗?
  • OSS文件实现强制下载的方法
  • OSS Post请求的Policy设置方法
  • OSS通过range参数获取部分文件
  • OSS的文件更新后,部分地区下载的文件仍是旧的版本
  • 在OSS控制台中读请求与写请求次数统计的来源
  • 使用OSS的JS SDK上传大于100K的文件时报错
  • OSS验证Refer防盗链是否生效
  • OSS变通实现IP黑白名单
  • STS生成的临时账户授权检查逻辑
  • OSS的Bucket权限管理
  • 如何获取AccessKeyId和AccessKeySecret
  • Access key对OSS的bucket控制权限太高,需要对bucket更细粒度的权限控制
  • RAM子账户授权OSS单个bucket中部分文件的访问权限
  • oss域名访问提示Anonymous access is forbidden for this operation.
  • OSS细粒度的权限控制
  • OSS异常流量排查及防护
  • 如何给子账号赋权OSS的操作?
  • 如何授权RAM子账号列举指定文件目录
  • Python sdk中multiupload上传如何验证文件完整性
  • OSS MD5一致性校验说明
  • OSS下载内容与实际内容不一致
  • 域名/网络
  • OSS如何查看Bucket内网、外网域名地址
  • ECS用户如何正确使用OSS内网地址?
  • OSS是否支持Bucket作为三级域名的访问方式?
  • OSS是否支持HTTPS访问
  • 通过反向代理访问OSS的HTTPS域名
  • OSS+CDN访问文件直接下载
  • OSS设置Object更新时自动刷新CDN缓存
  • OSS使用SDK访问Bucket提示Endpoint错误
  • OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'的解决方法
  • 访问OSS资源或者使用SDK时提示“ using the specified endpoint”
  • OSS绑定域名时验证域名所有权
  • 为什么OSS内网域名无法ping通
  • DNS解析
  • 站点中如何应用OSS资源
  • OSS如何开启CDN加速服务
  • OSS触发FIN的条件
  • OSS上传或下载的带宽限制
  • OSS上传慢
  • 如何停止绑定域名时默认开启的CDN服务?
  • 如何设置HTTPS证书托管
  • 对象存储OSS中Bucket的访问域名使用介绍
  • 对象存储OSS查看Bucket统计和Object统计方法
  • 通过OSS控制台资源监控报表功能了解Bucket使用情况
  • 通过OSS控制台概览了解Bucket相关属性
  • OSS通过管理控制台查看资源监控报表的请求次数统计信息
  • 如何授权子账号云查看OSS控制台总概览的基础数据
  • 存储空间(bucket)管理
  • 如何获取OSS上每个文件夹的大小
  • OSS中可以重命名Bucket吗?是否支持Object迁移?
  • OSS如何一键删除Bucket
  • OSS对object和目录的移动与修改操作
  • OSS的Bucket、Object、文件目录命名规范汇总
  • OSSFS通过www账户挂载Bucket
  • OSS API设置LifeCycle提示时间格式错误
  • OSS开启访问日志
  • 查找OSS Object的访问操作记录
  • OSS日志里面206代表什么
  • OSS的Bucket每天会自动生成名称中包含日期的Object
  • OSS数据操作常见问题FAQ
  • Bucket下出现异常文件如何排查
  • 如何查看存储空间大小
  • OSS可创建Bucket个数限制,容量是否需要扩容?
  • 如何删除Bucket
  • 文件(object)管理
  • OSS怎么更改Object元数据信息
  • OSS中LifeCycle删除文件的策略
  • 判断OSS文件被删除
  • OSS删除碎片文件
  • 当Object名称中存在不可见字符如何处理?
  • OSS有哪些批量操作?
  • OSS静态文件的打开方式
  • OSS的gzip压缩如何使用?
  • IE浏览器中浏览OSS的object URL中文文件名乱码
  • OSS 如何设置 Content-Type(MIME)?
  • 上传Object后如何获取访问URL
  • 如何给文件重命名
  • 如何修改、更新、编辑文件?
  • OSS上传文件大小限制
  • OSS SDK如何进行批量操作?
  • Java实现生成URL签名的代码示例
  • PHP实现OSS的签名URL
  • OSS如何通过sdk获取object的签名URL
  • OSS中的时间标准
  • 控制台获取签名链接后过一段时间超时
  • 调用oss sdk操作报错:SignatureDoesNotMatch
  • Object签名URL相关问题
  • 签名错误 (signature not match)
  • API/SDK
  • OSS支持时间同步的sdk
  • nternal.aliyuncs.com...
  • Oss Java sdk实现listobject(列出所有的object)
  • 使用OSS的javasdk的contentMD5出现log4j警告
  • OSS Java SDK超时&重传代码样例
  • 测试版PHP SDK中不能自动检测所需PHP模块的原因
  • OSS API文档 “Date”字段的GMT格式说明
  • - assumed...
  • OSS API返回结果有JSON格式的吗?
  • Python sdk查询所有object列表
  • iOS SDK和Android SDK如何开启log?
  • OSS图片处理服务不支持ICO格式图片
  • OSS图片处理服务绑定域名时提示:域名绑定在自己的其他Bucket上
  • 对象存储OSS控制台操作—图片鉴黄
  • OSS上传图片时exif信息处理规则
  • PHP SDK 2.0.1是否支持图片处理服务
  • OSS 图片处理服务配置文件缓存的方法
  • 怎样用多个域名来使用oss图片服务
  • 图片处理服务处理后的PNG图片的透明背景变黑
  • OSS 图片处理如何保护原始图片不被访问
  • OSS图片处理访问报Forbidden access to the original image错误的处理方法
  • 使用图片处理服务,原图无法访问。报错accessdenied。
  • OSS图片处理服务导致CORS配置失效
  • OSS图片处理URL访问报错NoSuchStyle, NoSuchKey, NoSuchFile
  • 图片的原图是正常的,被图片处理后就旋转了,该怎样处理
  • OSS图片处理对原图和缩略图的限制说明
  • OSS 如何将图片强制缩放成正方形并且不裁剪
  • 图片处理服务是否可以支持跨域操作
  • OSS上传图片访问URL返回http code值为403
  • 错误原因

    使用OSS Java SDK时,报类似如下错误,说明工程中可能有包冲突。

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
        at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
        at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
        at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:77)
    Caused by: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 3 more

    Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
     at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
     at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
     at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125)
     at com.aliyun.oss.common.comm.DefaultServiceClient.createHttpClientConnectionManager(DefaultServiceClient.java:237)
     at com.aliyun.oss.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:78)
     at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
     at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
     at OSSManagerImpl.upload(OSSManagerImpl.java:42)
     at OSSManagerImpl.main(OSSManagerImpl.java:63)

    错误原因是OSS Java SDK使用了Apache httpclient 4.4.1,而您的工程使用了与Apache httpclient 4.4.1冲突的Apache httpclient或commons-httpclient jar包。要查看工程使用的jar包及版本,请在您的工程目录下执行 mvn dependency:tree 。如下图所示,您的工程里使用了Apache httpclient 4.3:

  • 解决方法

    包冲突有以下两种解决方法:

  • 使用统一版本。如果您的工程使用与Apache httpclient 4.4.1冲突的版本,请您使用4.4.1版本,并在pom.xml删除其它版本的Apache httpclient依赖。如果您的工程使用了commons-httpclient,也可能存在冲突,请删除commons-httpclient。
  • 解除依赖冲突。如果您的工程依赖多个第三方包,而第三方包又依赖不同版本的Apache httpclient,您的工程里会有依赖冲突,请使用exclusion解除。更多信息,请参见 Maven Guides
  • OSS Java SDK依赖以下版本的包,冲突解决办法与httpclient类似。

  • 错误原因

    使用OSS Java SDK时,报类似如下错误,说明您的工程中可能缺少编译或运行OSS Java SDK所必需的包。

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
            at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
    Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... 3 more

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
            at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
    Caused by: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... 3 more

    Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
            at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:645)
            at … … 
            at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:471)
            at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:465)
            at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:82)
    Caused by: java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... 11 more

    OSS Java SDK依赖下列包:

  • aliyun-sdk-oss-2.2.1.jar
  • hamcrest-core-1.1.jar
  • jdom-1.1.jar
  • commons-codec-1.9.jar
  • httpclient-4.4.1.jar
  • commons-logging-1.2.jar
  • httpcore-4.4.1.jar
  • log4j-1.2.15.jar
  • 其中log4j-1.2.15.jar是可选的,需要日志功能的时候加入该包,其它包都是必需的。

  • 解决方法

    在您的工程中加入OSS Java SDK依赖的包。加入方法如下:

  • 如果您的工程在Eclipse中,请参见 Java SDK使用手册 中的安装方式二。
  • 如果您的工程在Ant中,请把OSS Java SDK依赖的包放入工程的lib目录中。
  • 如果您直接使用.javac或.java文件,请使用 -classpath -cp 命令指定OSS Java SDK依赖的包路径,或把OSS Java SDK依赖的包放入classpath路经下。
  • 错误原因

    运行OSS Java SDK程序时报如下类似错误,可能原因是Endpoint错误或者网络不通。

    com.aliyun.oss.ClientException: SocketException
        at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:71)
        at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:116)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67)
        at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:140)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111)
        at com.aliyun.oss.internal.OSSBucketOperation.getBucketInfo(OSSBucketOperation.java:1152)
        at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1220)
        at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1214)
        at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:94)
    Caused by: org.apache.http.conn.HttpHostConnectException: Connect to oss-test.oss-cn-hangzhou-internal.aliyuncs.com:80 [oss-test.oss-cn-hangzhou-internal.aliyuncs.com/10.84.135.99] failed: Connection timed out: connect
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
        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:113)
        ... 9 more
  • 解决方法

    您可以使用 ossutil 工具快速定位错误原因并解决问题。

  • 报错SignatureDoesNotMatch

  • 错误原因1

    AccessKey ID和AccssKey Secret不一致。

    有关获取AccessKey ID和AccssKey Secret的操作步骤,请参见 创建AccessKey

  • 错误原因2 签名URL使用不正确。错误示例如下:
    GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, object);
    request.setExpiration( new Date(new Date().getTime() + 3600 * 1000));
    request.addUserMetadata("author");
    URL url = ossClient.generatePresignedUrl(request);
    Map<String, String> header = new HashMap<String, String>();
    header.put("author");
    ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes()), -1, header);

    未指定Method参数时,默认使用GET方法。以上为PutObject请求,应指定Method参数并设置为PUT方法。

    通过PutObject发送请求时,请求Header中自定义的元数据必须以 x-oss-meta- 为前缀。以上示例中自定义元数据应改为 x-oss-meta-author

    解决方法:

    指定Method,并修改Header:

    request.addUserMetadata("author");
    request.setMethod(HttpMethod.PUT);
    URL url = ossClient.generatePresignedUrl(request);
    Map<String, String> header = new HashMap<String, String>();
    header.put("x-oss-meta-" + "author");
    ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes()), -1, header);
  • 错误原因3
  • 使用了低于3.7.0版本的OSS SDK,项目中引入了4.5.9及以上版本的httpclient。
  • 上传的文件名中包含 + 字符,而4.5.9版本的httpclient不会对 + 进行URLEncode编码,从而造成客户端与服务端计算的签名不一致而报错。
  • 1

    解决方法:

  • OSS SDK建议升级为3.11.1及以上版本, 以兼容4.5.9版本的httpclient。
  • 移除多余的httpclient依赖。引入OSS SDK时会自动引入httpclient依赖,如果是第三方库另外引入了httpclient,请参见 包冲突 解决方案。
  • 错误原因4 HttpClient 4.5.10版本不支持Header中包含ISO/9959-1标准以外的字符,但在项目中引入了4.5.10以上的httpclient,并在请求Header中包含了ISO/9959-1标准以外的字符,例如 x-oss-meta- 开头的自定义元数据中传入了中文字符。

    解决方法:

  • 参见 包冲突 解决方案,移除冲突的httpclient版本。
  • 在请求Header中传入符合ISO/9959-1标准的字符。
  • 错误原因

    客户端某些特殊的软件拦截了HTTP请求,或者公网路由劫持了HTTP请求。

    在Java 11上使用OSS Java SDK,且未在pom.xml文件中添加JAXB相关依赖。

  • 解决方法

    切换为HTTPS请求。

    添加JAXB相关依赖。操作步骤,请参见 安装SDK

  • org.apache.http.NoHttpResponseException: The target server failed to respond

  • 错误原因

    运行OSS Java SDK程序时,报类似如下错误:

    使用过期的连接会导致上述错误,该错误仅在Java SDK 2.1.2之前的版本出现。

  • 解决方法

    请升级OSS Java SDK到2.1.2及以后版本。

  • JVM中存在大量org.apache.http.impl.conn.PoolingHttpClientConnectionManager实例

  • 错误原因

    ossClient没有关闭导致。

  • 解决方法

    主动关闭已执行完毕的ossClient或使用单例模式。

  • 调用OSS Java SDK不响应

  • 错误原因

    调用OSS Java SDK不响应。通过 jstack -l pid 命令查看堆栈,问题出现在如下的位置:

    "main" prio=6 tid=0x000000000291e000 nid=0xc40 waiting on condition [0x0000000002dae000]
    java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000007d85697f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
        at org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138)
        at org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306)
        at org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64)
        at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192)
        at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185)
        at org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)
        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:113)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:123)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:68)
        at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:146)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:113)
        at com.aliyun.oss.internal.OSSObjectOperation.getObject(OSSObjectOperation.java:229)
        at com.aliyun.oss.OSSClient.getObject(OSSClient.java:629)
        at com.aliyun.oss.OSSClient.getObject(OSSClient.java:617)
        at samples.HelloOSS.main(HelloOSS.java:49)

    原因是连接池中连接泄漏,可能是使用ossObject后没有关闭。

  • 解决方法

    请检查您的程序,确保没有连接泄漏。关闭方法如下:

    // 读取文件
    OSSObject ossObject = ossClient.getObject(bucketName, objectName);
    // OSS操作
    // 关闭ossObject
    ossObject.close();

    问题排查的具体步骤,请参见 OSS Java SDK不响应问题排查

  • 错误原因

    如果您在使用ossClient.getObject时,报类似如下错误:

    Exception in thread "main" org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 11990526; received: 202880)
        at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180)
        at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
        at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
        at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:128)
        at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
        at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
        at java.io.FilterInputStream.close(FilterInputStream.java:181)
        at java.io.FilterInputStream.close(FilterInputStream.java:181)
        at com.aliyun.oss.event.ProgressInputStream.close(ProgressInputStream.java:147)
        at java.io.FilterInputStream.close(FilterInputStream.java:181)
        at samples.HelloOSS.main(HelloOSS.java:39)

    原因是两次读取数据间隔时间超过1分钟。OSS会关闭超过1分钟没有发送或接收数据的连接。

  • 解决方法

    如果您每次仅读取部分数据,且处理数据的时间不固定,建议使用指定范围读取,避免数据读取时连接关闭。更多信息,请参见 范围下载

  • 错误原因

    调用OSS Java SDK的程序,运行一段时间(根据业务量,几小时到几天不等)后内存泄露。 推荐使用 Eclipse Memory Analyzer (MAT) 分析内存使用情况。更多信息,请参见 使用MAT进行堆转储文件分析

    如果分析结果类似下图所示(PoolingHttpClientConnectionManager占96%的内存),原因是程序中可能多次执行new OSSClient,但是没有调用ossClient.shutdown,造成内存泄漏。

  • 解决方法

    new OSSClient操作完成后,请通过shutdown进行关闭,保证new OSSClient和ossClient.shutdown成对使用。

  • 调用ossClient.shutdown报异常InterruptedException

  • 错误原因

    OSS Java SDK 2.3.0之前的版本在调用ossClient.shutdown时报如下异常:

    java.lang.InterruptedException: sleep interrupted
            at java.lang.Thread.sleep(Native Method)
            at com.aliyun.oss.common.comm.IdleConnectionReaper.run(IdleConnectionReaper:76)

    原因是ossClient后台线程IdleConnectionReaper会定时关闭闲置连接。IdleConnectionReaper在Sleep时,调用ossClient.shutdown,就会报上面的异常。

  • 解决方法

    使用如下代码,忽略该异常:

    try {
        ossClient.shutdown();
    } catch(Exception e) {
         

    请求出现异常“SDK.ServerUnreachable : Speicified endpoint or uri is not valid”

  • 用户端并发请求STS过高。
  • 网络到Server端超时。
  • 所使用的STS SDK以及SDK core不是最新版本。
  • 用户端并发请求STS过高,而用户端的ECS或者本地PC不足以承载当时的并发,降低OSS并发。
  • 用户的网络到Server端有超时现象可以进行抓包验证。
  • 建议将STS SDK及SDK core升级至最新版本。
  • 出现问题时是否出现网络抖动。
  • 主机的socket连接数是否占满。
  • 确认出现问题时连接数是否超过SDK中设置的maxconnection,如果连接数超过maxconnection设置,也会出现socket异常。
  • 如果以上都没有问题,建议您部署tcpdump或者wireshark抓包,问题复现后再分析数据包。

  • 使用OSS PostObject的callback没有触发回调

    使用OSS PostObject的callback没有触发回调,但是通过PutObject用同样的callback触发了回调。一般情况下,如果JSON格式有误或者回调失败,都会返回相应的消息,这里需要分别测试Put和Post回调效果:

    发送请求时callback参数在file下面。 调整callback参数与file的位置。 此时测试结果显示业务服务器成功抓取请求。

    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发送请求。

  • 使用Java SDK的generatePresignedUrl生成的请求报错Request has expired

  • 错误原因

    int类型溢出,导致2038年时间戳问题。

    超出URL设置的过期时间后发起上传请求。

  • 解决方法

    如果是int类型溢出,建议Java SDK中过期时长不要超过2038年。

    如果因超出URL设置的过期时间后发起上传请求,建议设置合理的过期时间,确保过期时间大于您的发起请求时间。

  • 报错Invalid Response或Implementation of JAXB-API has not been found on module path or classpath

  • 错误原因

    使用了Java 9以上的版本,并且没有添加JAXB依赖。

  • 解决方法

    关于如何添加JAXB依赖的更多信息,请参见 安装SDK

  • 如何开启或关闭SDK日志

    Apache Log4j定义了不同级别的日志,包括OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

    通过配置log4j的属性选择开启或者关闭SDK日志:

    更多错误排查,请参见 OSS错误响应