参考链接:开放式存储(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);
//按照上述代码进行批量下载
}
三、命令行方式管理OSS数据工具 —— ossutil
阿里OSS工具说明:使用说明
- 根据windows系统版本下载ossutil安装包,解压使用,双击ossutil.bat跳出命令行窗口
ossutil64.exe config -e oss-cn-shanghai.aliyuncs.com -i <accessKeyId> -k <accessKeySecret>
- 本地批量上传至OSS:
ossutil64.exe cp <本地目录> oss://<bucketName>[/<上传路径>/] -r
- OSS批量下载至本地:
ossutil64.exe cp oss://<bucketName>/[<上传路径>/] <本地目录> -r