关于阿里云OSS的批量下载问题

本文介绍了一种从阿里云批量下载文件的方法,并将其打包为ZIP文件供用户下载。该方法适用于需要频繁处理大量文件的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先自己登陆控制台查看自己的存储空间等信息

 

2.代码奉上。

 
  1. /**

  2. * 从阿里云下载文件 (以附件形式下载) 多个文件进行zip下载 第二种

  3. * @param request

  4. * @param response

  5. */

  6. @ResponseBody

  7. @RequestMapping(value = "/zipFilesDown", method = RequestMethod.GET)

  8. public void zipFilesDown(HttpServletRequest request, HttpServletResponse response){

  9. String userId = request.getParameter("userId");

  10. //阿里云基础配置

  11. String endpoint = OSSConstants.OSS_ENDPOINT;

  12. String accessKeyId = OSSConstants.OSS_ACCESS_KEY_ID;

  13. String accessKeySecret = OSSConstants.OSS_ACCESS_KEY_SERCRET;

  14. String bucketName = OSSConstants.OSS_BUCKET_NAME_ONE;

  15. String fileHost = OSSConstants.OSS_FILE_HOST;

  16. try {

  17. // 初始化

  18. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);;

  19. String fileName = userId + ".zip";

  20. // 创建临时文件

  21. File zipFile = File.createTempFile(userId, ".zip");

  22. FileOutputStream f = new FileOutputStream(zipFile);

  23.  
  24. CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());

  25. // 用于将数据压缩成Zip文件格式

  26. ZipOutputStream zos = new ZipOutputStream(csum);

  27.  
  28. // 构造ListObjectsRequest请求。

  29. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);

  30. // 列出userId目录下的所有文件和文件夹。

  31. listObjectsRequest.setPrefix(fileHost + "/" + userId + "/");

  32. ObjectListing listing = ossClient.listObjects(listObjectsRequest);

  33. // 遍历所有文件。

  34. System.out.println("Objects:");

  35. for (OSSObjectSummary ossObjectSummary : listing.getObjectSummaries()) {

  36. System.out.println(ossObjectSummary.getKey());

  37. String eachFileName = ossObjectSummary.getKey().substring(ossObjectSummary.getKey().lastIndexOf("-")+1);

  38. // 获取Object,返回结果为OSSObject对象

  39. OSSObject ossObject = ossClient.getObject(bucketName, ossObjectSummary.getKey());

  40. // 读去Object内容 返回

  41. InputStream inputStream = ossObject.getObjectContent();

  42. // 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法,确保压缩包里面文件不同名

  43. zos.putNextEntry(new ZipEntry(eachFileName));

  44. int bytesRead;

  45. // 向压缩文件中输出数据

  46. while((bytesRead=inputStream.read())!=-1){

  47. zos.write(bytesRead);

  48. }

  49. inputStream.close();

  50. zos.closeEntry(); // 当前文件写完,定位为写入下一条项目

  51. }

  52. zos.close();

  53. String header = request.getHeader("User-Agent").toUpperCase();

  54. if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {

  55. fileName = URLEncoder.encode(fileName, "utf-8");

  56. fileName = fileName.replace("+", "%20"); //IE下载文件名空格变+号问题

  57. } else {

  58. fileName = new String(fileName.getBytes(), "ISO8859-1");

  59. }

  60. response.reset();

  61. response.setContentType("text/plain");

  62. response.setContentType("application/octet-stream; charset=utf-8");

  63. response.setHeader("Location", fileName);

  64. response.setHeader("Cache-Control", "max-age=0");

  65. response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

  66.  
  67. FileInputStream fis = new FileInputStream(zipFile);

  68. BufferedInputStream buff = new BufferedInputStream(fis);

  69. BufferedOutputStream out=new BufferedOutputStream(response.getOutputStream());

  70. byte[] car=new byte[1024];

  71. int l=0;

  72. while (l < zipFile.length()) {

  73. int j = buff.read(car, 0, 1024);

  74. l += j;

  75. out.write(car, 0, j);

  76. }

  77. // 关闭流

  78. fis.close();

  79. buff.close();

  80. out.close();

  81.  
  82. ossClient.shutdown();

  83. // 删除临时文件

  84. zipFile.delete();

  85. } catch (Exception e) {

  86. e.printStackTrace();

  87. }

  88. }

此段代码大意是把阿里云上模拟的文件夹中的文件遍历出来,然后把这些文件按流的方式输出进临时创建的zip压缩文件中,最后把临时的压缩文件也用流输出,输出到页面上,供客户下载。临时生成的文件一定要删掉,要不然每次下载都会生成一个会影响系统运行(ps:如果删不掉就肯定是input流或者output流没有关闭,仔细检查一下)。

感谢 https://blog.csdn.net/m0_37844800/article/details/81068833

### 阿里云OSS批量下载文件的方法教程 阿里云对象存储服务(OSS)支持通过多种方式实现文件的批量下载,包括使用官方提供的SDK、命令行工具或直接通过浏览器访问公共链接等方式[^1]。以下是关于阿里云OSS批量下载文件的具体方法: #### 1. 使用OSS SDK实现批量下载 阿里云提供了多语言的OSS SDK,开发者可以通过编程的方式实现文件的批量下载。以下是一个基于Python的示例代码,展示如何通过OSS SDK批量下载文件: ```python import oss2 # 初始化OSS连接 auth = oss2.Auth('your-access-key-id', 'your-access-key-secret') bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name') # 获取Bucket内所有文件列表 for obj in oss2.ObjectIterator(bucket): # 下载文件到本地 bucket.get_object_to_file(obj.key, f'./downloaded_files/{obj.key}') ``` 上述代码中,`your-access-key-id` 和 `your-access-key-secret` 是用户的访问密钥,`your-bucket-name` 是目标存储空间名称。通过遍历Bucket中的所有对象并调用`get_object_to_file`方法,可以将文件逐一下载到本地目录[^1]。 #### 2. 使用OSSUtil命令行工具 OSSUtil是一款由阿里云提供的高效命令行工具,支持对OSS进行各种操作,包括批量下载文件。以下是使用OSSUtil批量下载文件的命令示例: ```bash ossutil cp -r oss://your-bucket-name/local-folder ./local-path --include "*.*" ``` 在该命令中,`-r`参数表示递归操作,`--include "*.*"`用于指定需要下载的文件类型。通过这种方式,用户可以轻松地将整个文件夹或特定类型的文件从OSS下载到本地[^1]。 #### 3. 使用阿里云控制台手动下载 如果文件数量较少,也可以通过阿里云管理控制台手动实现批量下载。具体步骤如下: - 登录阿里云控制台,进入OSS管理页面。 - 选择目标Bucket和文件夹。 - 勾选需要下载的文件,点击“下载”按钮即可完成操作[^1]。 需要注意的是,手动下载方式适合少量文件的操作,对于大规模文件下载,建议优先考虑使用SDK或命令行工具。 --- #### 注意事项 - 在使用SDK或命令行工具时,请确保已正确配置访问权限和网络环境。 - 如果涉及大量文件的下载,建议合理设置并发数以提高效率,同时避免对OSS服务器造成过大的压力[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值