实现从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 
阿里云OSS下载文件的步骤如下: 首先,需要引入阿里云的依赖包,例如在Maven项目中可以添加以下依赖: ```xml <!--阿里云oss --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> ``` \[1\] 其次,在Controller中编写相应的方法来处理下载请求。例如: ```java // 相应的Controller @RequestMapping(value = "/download", method = RequestMethod.GET) public void downloadSource(HttpServletResponse response) { // oss服务器上相应的文件名 // 文件名必须正确,否则会报错 List<String> fileName = new ArrayList<>(); fileName.add("文件1.doc"); fileName.add("文件2.doc"); // 生成压缩包的文件名 String zipFileName = "test"; // 调用AliYunOssUtils的方法进行批量下载 AliYunOssUtils.batchDownLoadOssFile(fileName, zipFileName, response); } ``` \[2\] 最后,根据文件的URL链接获取OSS文件链接,并读取输入流进行下载。例如: ```java // 截取片段代码 URL url = new URL(urllink); // 打开到此URL的连接并返回一个用于从该连接读入的InputStream。 InputStream in = url.openStream(); String gaokuai_url = HttpUpload.uploadOSS(in, fileName); // 如果获取到了文件链接 if (!gaokuai_url.equals("")) { if (sb.length() > 0) { sb.append(tag + gaokuai_url); } else { sb.append(gaokuai_url); } } ``` \[3\] 以上是从阿里云OSS下载文件的步骤。您可以根据具体的需求和代码框架进行相应的调整和实现。 #### 引用[.reference_title] - *1* [Java调用阿里云oss下载文件](https://blog.csdn.net/Biexiansheng/article/details/121047471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [从阿里云OSS下载文件的总结](https://blog.csdn.net/qq_38749759/article/details/107863291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [阿里云OSS文件下载功能简易实现](https://blog.csdn.net/loongshawn/article/details/69396768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值