您的位置:首页 > 其它

实现从oss(阿里云)服务器批量下载文件

2018-01-11 18:16 976 查看
参考链接:开放式存储(OSS)Java API手册 1.0 documentation

一、OSS上同一路径下文件批量下载

假设OSS上Bucket中有四个文件:fun/like/001.avi、fun/like/002.avi、fun/like/003.jpg、fun/like/004.mp3,批量下载四个文件,并将四个文件存储本地路径:“D:/fun/like/”下,即:D:/fun/like/(001.avi、002.avi、003.jpg、004.mp3)。

/**
* OSS文件批量下载
*
* @param localPath 本地存储路径
* @param ossPath   文件在OSS上的路径
*/
public static void imageBatchDownload(String localPath, String ossPath) {
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "oss-cn-shanghai.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";

// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 构造ListObjectsRequest请求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
//Delimiter 设置为 “/” 时,罗列该文件夹下的文件
listObjectsRequest.setDelimiter("/");
//Prefix 设为某个文件夹名,罗列以此 Prefix 开头的文件
listObjectsRequest.setPrefix("fun/like/");

ObjectListing listing = ossClient.listObjects(listObjectsRequest);

// 遍历所有Object:目录下的文件
for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
//key:fun/like/001.avi等,即:Bucket中存储文件的路径
String key = objectSummary.getKey();
//判断文件所在本地路径是否存在,若无,新建目录
File file = new File(localPath + key);
File fileParent = file.getParentFile();
if (!fileParent.exists()) {
fileParent.mkdirs();
}
//下载object到文件
ossClient.getObject(new GetObjectRequest(bucketName, key), file);
}
System.out.println("下载完成");
// 关闭client
ossClient.shutdown();
}


二、OSS上不同路径下文件批量下载

若批量下载文件不在同一路径下,假设OSS上Bucket中有四个文件:fun/like/001.avi、fun/hate/002.avi、可进行如下操作:

// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 构造ListObjectsRequest请求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
//Delimiter 设置为 “/” 时,罗列该文件夹下的文件
listObjectsRequest.setDelimiter("/");
//Prefix 设为某个文件夹名,罗列以此 Prefix 开头的文件
listObjectsRequest.setPrefix("fun/");
ObjectListing listing = ossClient.listObjects(listObjectsRequest);
//遍历CommonPrefix:目录下的所有子文件夹
for (String commonPrefix : listing.getCommonPrefixes()) {
//commonPrefix: fun/like/、fun/hate/
System.out.println(commonPrefix);
//按照上述代码进行批量下载
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: