OSS JAVA SDK-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

OSS JAVA SDK

简介: 环境准备 使用 Java 1.8 及以上版本。 查看版本执行命令java -version查看Java版本。 下载SDK 直接通过 GitHub 下载 安装SDK,在Maven项目中加入依赖项(推荐方式) com.aliyun.oss aliyun-sdk-oss 2.8.3 初始化的参数设置 弱网的环境下最好将超时时间设置长一些,增加重试次数,避免上传失败。

环境准备

  • 使用 Java 1.8 及以上版本。
  • 查看版本
    执行命令java -version查看Java版本。
  • 已知
    JAVA SDK 无法获取 OSS 返回的 http header 和 http code,都被 SDK 封装;判断上传成功的标准是没有异常抛出,并且返回的 requestID 不为空;

下载SDK

  • 直接通过 GitHub 下载
  • 安装SDK,在Maven项目中加入依赖项(推荐方式)
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>

初始化的参数设置

弱网的环境下最好将超时时间设置长一些,增加重试次数,避免上传失败。


// 创建ClientConfiguration。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
ClientConfiguration conf = new ClientConfiguration();

// 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
conf.setMaxConnections(2048);
// 设置Socket层传输数据的超时时间,默认为50000毫秒。
conf.setSocketTimeout(10000);
// 设置建立连接的超时时间,默认为50000毫秒。
conf.setConnectionTimeout(10000);
// 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
conf.setConnectionRequestTimeout(1000);
// 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
conf.setIdleConnectionTime(10000);
// 设置失败请求重试次数,默认为3次。
conf.setMaxErrorRetry(5);

使用遇到问题

下文结合一些常见的使用案例说下注意问题,案例不定期补充,所有用户数据信息已经处理过。

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

1

分析:

出现这种问题意思是用户没有连接到阿里云网关,一般和一下几个原因有关系:

  • 用户端的代码中并发请求 STS 过高,而用户端的 ECS 或者本地 PC 不足以承载当时的并发导致,降低 OSS 并发。
  • 用户的网络到 server 端有超时现象可以进行抓包验证。
  • 用户的 STS SDK 版本以及 SDK core 版本不是最新导致。更换到新版 SDK 测试一下

案例:NoSuchKey

case:java.lang.Exception: com.aliyun.oss.OSSException: 
Not Foundn[ErrorCode]: NoSuchKeyn

java SDK 出现这种问题,就是源文件不存在,可以参考排查系列中的 404 问题排查

案例:socketException

2

分析:

可以明显看到错误是 socket 异常了,这可能是 socket 在 init 阶段就失败了,请求都没有到 OSS ,建议客户端检查下:

  • 当时的网络是否出现抖动。
  • 主机的 socket 连接数是否占满。
  • SDK 中设置的 maxconnection 是多大,如果当时链接数超过
    maxconnection 设置,也会出现 socket 异常。
  • 如果以上没有没有问题,只能让用户部署 tcpdump 或者 wireshark 抓包,然后复现问题后,分下数据包。

案例:PostObject 没有回调

使用OSS PostObject的callback没有发生回调。但是通过 putobject 用同样的 callback 是有回调发生的,怀疑 PostObject 有问题?

1

分别测试 PUTPOST 效果如下,PUT 触发了回调,POST 没有触发回调。
按理说,如果json格式有错误或者回调失败,都应该会返回对应的msg,而上传后一切成功但为什么没有发生回调呢 ?

2

3

分析:

  • 检查到在发送请求时callback的参数是在 file 下面。
    4
  • 修改为,调整一下位置,这样就会作为file的一部分。
    5
  • 测试结果成功,业务服务器上也如愿的抓到了请求
    11

案例:Java 结合 web 实现通过 STS 上传 OSS

如果出现如下报错,可能和跨域或者代码中配置的 OSS 信息有关,可以按照如下思路处理。

1

2

3

分析:

如果是使用 java 的代码,可以看下

  • 服务端生成上传信息时 host 和 bucket 是否填写正确。
  • 是否对 OSS 配置了跨域文件。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章