前几天一个朋友让我帮他把几个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
很有用的知识,感谢分享