前几天一个朋友让我帮他把几个OSS里的不同bucket文件进行复制,就是将都在华北2区的名称为A的bucket的文件全部复制到B中。
如果是不同区域的,可以直接在后台。同一区域的,目前我查找文档好像就两种方法,一种是下载到本地,手动上传;一种是用 SDK API 上传。
本文介绍使用 Java SDK 来复制两个仓库里的文件。
具体步骤如下
1、创建一个 Java 工程
可以是 Maven 项目,也可以是一个普通的 Java 项目
2、添加依赖
也可以直接下载官方的jar包,添加到环境中
3、Demo 代码
官方文档:点此
如果是不同区域的,可以直接在后台。同一区域的,目前我查找文档好像就两种方法,一种是下载到本地,手动上传;一种是用 SDK API 上传。
本文介绍使用 Java SDK 来复制两个仓库里的文件。
具体步骤如下
1、创建一个 Java 工程
可以是 Maven 项目,也可以是一个普通的 Java 项目
2、添加依赖
- <dependency>
- <groupId>com.aliyun.oss</groupId>
- <artifactId>aliyun-sdk-oss</artifactId>
- <version>2.8.3</version>
- </dependency>
也可以直接下载官方的jar包,添加到环境中
3、Demo 代码
- package com.example.demo;
- import com.aliyun.oss.OSSClient;
- import com.aliyun.oss.model.*;
- import lombok.extern.slf4j.Slf4j;
- import java.util.ArrayList;
- import java.util.List;
- @Slf4j
- public class Demo {
- // Endpoint以北京为例,其它Region请按实际情况填写。
- public final static String ENDPOINT = "oss-cn-beijing.aliyuncs.com";
- //accessKey
- public final static String ACCESS_KEY_ID = "xxxxx";
- //accessKey secret
- public final static String ACCESS_KEY_SECRET = "xxxxxxx";
- //源bucket名
- public final static String SOURCE_BUCKET_NAME = "xxxxxxx";
- //目标bucket名
- public final static String TARGET_BUCKET_NAME = "xxxxxxx";
- /**
- * 获得文件列表
- * @return
- */
- public static List<String> listKeys() {
- List<String> keyList = new ArrayList<>();
- // 创建OSSClient实例。
- OSSClient ossClient = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
- // 设置最大个数。
- final int maxKeys = 200;
- String nextMarker = null;
- ObjectListing objectListing;
- do {
- objectListing = ossClient.listObjects(new ListObjectsRequest(SOURCE_BUCKET_NAME).withMarker(nextMarker).withMaxKeys(maxKeys));
- List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
- for (OSSObjectSummary s : sums) {
- keyList.add(s.getKey());
- }
- nextMarker = objectListing.getNextMarker();
- } while (objectListing.isTruncated());
- // 关闭OSSClient。
- ossClient.shutdown();
- return keyList;
- }
- /**
- * 拷贝文件
- * @param keyList
- */
- public static void copyFiles(List<String> keyList) {
- Long startTime = System.currentTimeMillis();
- // 创建OSSClient实例。
- OSSClient ossClient = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
- ObjectMetadata meta = new ObjectMetadata();
- meta.setContentType("text/html");
- // 复制文件。
- for (int i = 0; i < keyList.size(); i++) {
- log.info("开始上传:" + keyList.get(i)+" :第"+(i+1)+"个文件");
- // 创建CopyObjectRequest对象。
- CopyObjectRequest copyObjectRequest = new CopyObjectRequest(SOURCE_BUCKET_NAME, keyList.get(i), TARGET_BUCKET_NAME, keyList.get(i));
- // 设置新的文件元信息。
- copyObjectRequest.setNewObjectMetadata(meta);
- ossClient.copyObject(copyObjectRequest);
- log.info("上传成功:" + keyList.get(i)+" :第"+(i+1)+"个文件");
- }
- // 关闭OSSClient。
- ossClient.shutdown();
- Long endTime = System.currentTimeMillis();
- System.out.println("全部上传成功:共"+keyList.size()+"文件。总耗时:" + (endTime - startTime) + "ms");
- }
- public static void main(String args[]) {
- //列举所有文件名
- List<String> keyList = listKeys();
- //循环拷贝文件
- copyFiles(keyList);
- }
- }
官方文档:点此
2018年11月07日 14:55:44
很有用的知识,感谢分享