环境准备 ● 使用 Java 1.8 及以上版本。 ● 查看版本执行 命令 java -version 查看 Java 版本 下载 SDK ● 直接通过 GitHub 下载 ● 安装 SDK,在 Maven 项目中加入依赖项(推荐方式) com.aliyun.oss aliyun-sdk-oss 2.8.3 初始化的参数设置 日志调优参数 一般情况下不会开启日志功能,很多用户都是开启日志 log4j 后写变慢了;网上 有很多关闭的方法可以找下开源的处理文档关闭掉,如果用户配置了 log4j 的属性文 件,需要在那个属性文件里 配置 oss 的 日志级别。 超时参数设置 弱网的环境下最好将超时时间设置长一些,增加重试次数,避免上传失败。
// 创建 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 会通过公网先拉源文件,如果源拉文件很慢,直接
影响到写 OSS 速度,尽量不要通过网络流上传文件,尽量使用本地上传。如果要用
网路流的方式传输,先保证源文件网络的通畅和带宽充足。
// Endpoint 以杭州为例,其它 Region 请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 账号进
行 API 访问或日常运维,请登录 https://ram.console.aliyun.com 创建 RAM 账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建 OSSClient 实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
// 上传网络流。
InputStream inputStream = new URL("https://www.aliyun.com/").openStream();
ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);
// 关闭 OSSClient。
ossClient.shutdown();
主机文件描述符 用户使用 SDK 配置的 connection 代表应用层处理的最大能力,要和主机的文 件描述符相对成,如果主机设置的 FD 是 1000 ,SDK 应用层即便设置到 2000,最 后效果也达不到 2000 ,最多只能处理 1000 个连接。 代码优化 java SDK 在 分片的基础上增加了断点传输,既可以在分片基础上增加并发,也 支持断点记录的功能,在遇到网络问题断开时不需要每次从文件开始重传,从记录断 点的位置继续传输。 分片大小建议 100M,1M 分片 1000M,10M 分片 10G,100M 分片 100G,1G 分片 setPartSize 设置分片大小,默认 1M
// Endpoint 以杭州为例,其它 Region 请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 账号进
行 API 访问或日常运维,请登录 https://ram.console.aliyun.com 创建 RAM 账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建 OSSClient 实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,
accessKeySecret);
ObjectMetadata meta = new ObjectMetadata();
// 指定上传的内容类型。
meta.setContentType("text/plain");
// 通过 UploadFileRequest 设置多个参数。
UploadFileRequest uploadFileRequest = new
UploadFileRequest("<yourBucketName>","<yourObjectName>");
// 通过 UploadFileRequest 设置单个参数。
// 设置存储空间名称。
//uploadFileRequest.setBucketName("<yourBucketName>");
// 设置文件名称。
//uploadFileRequest.setKey("<yourObjectName>");
// 指定上传的本地文件。
uploadFileRequest.setUploadFile("<yourLocalFile>");
// 指定上传并发线程数,默认为 1。
uploadFileRequest.setTaskNum(5);
// 指定上传的分片大小,范围为 100KB~5GB,默认为文件大小 /10000。
uploadFileRequest.setPartSize(1 * 1024 * 1024);
// 开启断点续传,默认关闭。
uploadFileRequest.setEnableCheckpoint(true);
// 记录本地分片上传结果的文件。开启断点续传功能时需要设置此参数,上传过程中的进度信息会保存
在该文件中,如果某一分片上传失败,再次上传时会根据文件中记录的点继续上传。上传完成后,该文件
会被删除。默认与待上传的本地文件同目录,为 uploadFile.ucp。
uploadFileRequest.setCheckpointFile("<yourCheckpointFile>");
// 文件的元数据。
uploadFileRequest.setObjectMetadata(meta);
// 设置上传成功回调,参数为 Callback 类型。
uploadFileRequest.setCallback("<yourCallbackEvent>");
// 断点续传上传。
ossClient.uploadFile(uploadFileRequest);
// 关闭 OSSClient。
ossClient.shutdown();
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。