目录
- 1、流式下载
- 1.1、代码示例
- 1.2、执行结果
- 2、下载到本地文件
- 2.1、代码示例
- 2.2、执行结果
- 3、断点续传下载
- 3.1、代码示例
- 3.2、执行结果
1、流式下载
当下载的文件太大或者一次性下载耗时太长时,您可以通过流式下载,一次处理部分内容,直到完成文件的下载。
说明:要流式下载,必须有oss:GetObject权限。
1.1、代码示例
/**
* endpoint是访问OSS的域名。
* 参考https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.563479cc0ioUZ7
*/
private static String endpoint = "<yourEndpoint>";
/**
* accessKeyId和accessKeySecret是OSS的访问密钥,
* 参考:https://help.aliyun.com/zh/oss/product-overview/what-is-oss?spm=a2c4g.11186623.0.i42
* 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
*/
private static String accessKeyId = "<yourAccessKeyId>";
private static String accessKeySecret = "<yourAccessKeySecret>";
/**
* Bucket用来管理所存储Object的存储空间,
* 参考:https://help.aliyun.com/zh/oss/user-guide/buckets-10/?spm=a2c4g.11186623.0.0.47ba2cd9binPXN
* Bucket命名规范如下:Bucket名称在OSS范围内必须全局唯一,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
*/
private static String bucketName = "<yourBucketName>";
public static void main(String[] args) throws Exception {
// 填写Object完整路径,例如 dmjxsy/file.png。Object完整路径中不能包含Bucket名称。
String objectName = "dmjxsy/DiskId2.log";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);
try {
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
// 读取文件内容。
System.out.println("Object content:");
BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
while (true) {
String line = reader.readLine();
if (line == null)
break;
System.out.println("\n" + line);
}
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
reader.close();
// ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
ossObject.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
1.2、执行结果
2、下载到本地文件
将存储空间(Bucket)中的文件(Object)下载到本地文件。
说明:要下载到本地文件,必须有oss:GetObject权限。
2.1、代码示例
/**
* endpoint是访问OSS的域名。
* 参考https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.563479cc0ioUZ7
*/
private static String endpoint = "<yourEndpoint>";
/**
* accessKeyId和accessKeySecret是OSS的访问密钥,
* 参考:https://help.aliyun.com/zh/oss/product-overview/what-is-oss?spm=a2c4g.11186623.0.i42
* 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
*/
private static String accessKeyId = "<yourAccessKeyId>";
private static String accessKeySecret = "<yourAccessKeySecret>";
/**
* Bucket用来管理所存储Object的存储空间,
* 参考:https://help.aliyun.com/zh/oss/user-guide/buckets-10/?spm=a2c4g.11186623.0.0.47ba2cd9binPXN
* Bucket命名规范如下:Bucket名称在OSS范围内必须全局唯一,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
*/
private static String bucketName = "<yourBucketName>";
public static void main(String[] args) throws Exception {
// 填写Object完整路径,例如 dmjxsy/DiskId2.log。Object完整路径中不能包含Bucket名称。
String objectName = "dmjxsy/DiskId2.log";
//下载到本地路径
String pathName = "D:\\Downloads\\12.log";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);
try {
// 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
} catch (Exception e) {
e.printStackTrace();
}finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
2.2、执行结果
3、断点续传下载
当下载大文件时,如果网络不稳定或者程序异常退出,会导致下载失败,甚至重试多次仍无法完成下载。为此,OSS提供了断点续传下载功能。断点续传下载将需要下载的文件分成若干个分片分别下载,所有分片都下载完成后,将所有分片合并成完整的文件。
说明:要断点续传下载,必须有oss:GetObject权限。
3.1、代码示例
/**
* endpoint是访问OSS的域名。
* 参考https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.563479cc0ioUZ7
*/
private static String endpoint = "<yourEndpoint>";
/**
* accessKeyId和accessKeySecret是OSS的访问密钥,
* 参考:https://help.aliyun.com/zh/oss/product-overview/what-is-oss?spm=a2c4g.11186623.0.i42
* 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
*/
private static String accessKeyId = "<yourAccessKeyId>";
private static String accessKeySecret = "<yourAccessKeySecret>";
/**
* Bucket用来管理所存储Object的存储空间,
* 参考:https://help.aliyun.com/zh/oss/user-guide/buckets-10/?spm=a2c4g.11186623.0.0.47ba2cd9binPXN
* Bucket命名规范如下:Bucket名称在OSS范围内必须全局唯一,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
*/
private static String bucketName = "<yourBucketName>";
public static void main(String[] args) throws Exception {
// 填写Object完整路径,例如 dmjxsy/file.png。Object完整路径中不能包含Bucket名称。
String objectName = "dmjxsy/DiskId2.log";
//下载到本地路径
String localPathName = "D:\\Downloads\\12.log";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);
try {
// 请求10个任务并发下载。
DownloadFileRequest downloadFileRequest = new DownloadFileRequest(bucketName, objectName);
// 指定Object下载到本地文件的完整路径,例如D:\Downloads\12.log。
downloadFileRequest.setDownloadFile(localPathName);
// 设置分片大小,单位为字节,取值范围为100 KB~5 GB。默认值为100 KB。
downloadFileRequest.setPartSize(1 * 1024 * 1024);
// 设置分片下载的并发数,默认值为1。
downloadFileRequest.setTaskNum(10);
// 开启断点续传下载,默认关闭。
downloadFileRequest.setEnableCheckpoint(true);
// 设置断点记录文件的完整路径,例如D:\Downloads\12.log.dcp。
// 只有当Object下载中断产生了断点记录文件后,如果需要继续下载该Object,才需要设置对应的断点记录文件。下载完成后,该文件会被删除。
//downloadFileRequest.setCheckpointFile("D:\Downloads\12.log.dcp");
// 下载文件。
DownloadFileResult downloadRes = ossClient.downloadFile(downloadFileRequest);
// 下载成功时,会返回文件元信息。
ObjectMetadata objectMetadata = downloadRes.getObjectMetadata();
System.out.println(objectMetadata.getETag());
System.out.println(objectMetadata.getLastModified());
System.out.println(objectMetadata.getUserMetadata().get("meta"));
} catch (Exception e) {
e.printStackTrace();
} catch (Throwable throwable) {
throwable.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}