实现从oss(阿里云)服务器批量下载文件 - Go语言中文社区

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


参考链接:开放式存储(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 
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xinyu112/article/details/79037188
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 23:00:50
  • 阅读 ( 1759 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢