【138】七牛雲兩個賬戶之間數據遷移

假定有兩個七牛雲賬戶甲、乙。需要把數據從甲轉移到乙。
在七牛雲網站,登錄乙賬戶,進入管理控制檯,如圖:
在這裏插入圖片描述

在管理控制檯,點擊左側菜單的對象存儲,如圖:
在這裏插入圖片描述
在左側的存儲空間列表中,點擊乙賬戶準備接收數據的存儲空間列表,點擊空間授權tab頁,一定要選擇讀寫權限。授權用戶填寫甲的註冊郵箱,重命名空間是指乙的空間在甲賬戶中的顯示名稱。如圖:

在這裏插入圖片描述

我假設甲賬戶存儲空間是bucket1,乙賬戶存儲空間名稱是bucket2。上面空間授權的時候,重命名空間設置成bucket2-a。

打開鏈接 https://developer.qiniu.com/kodo/tools/1302/qshell

下載qshell工具,我下載的是windows版。我下載後把exe文件放到目錄 D:\program\qshell 下。
修改系統變量,右擊我的電腦 > 點擊屬性 > 高級系統設置 > 高級選項卡 > 環境變量。
在 Path後面添加 D:\program\qshell 。配置完後打開命令行,輸入 qshell -v 命令顯示版本信息表示環境變量同步成功。

七牛雲登錄甲賬戶,在個人中心 > 密鑰管理 裏面可以找到 AK 和 SK。
在我的Windows電腦命令行裏輸入如下命令:

qshell account AK SK zhangchao

這樣可以在本地保存甲賬戶。其中zhangchao是用戶名,可以隨便設置。
命令 qshell user ls 顯示本地保存的用戶。

我們需要導出七牛雲上存儲的文件名稱,執行如下命令:

qshell listbucket bucket1 -o t1.txt

bucket1 是甲賬戶上要移出的存儲空間,t1.txt 是保存到本地的文件。t1.txt 文件的格式類似這種:

008949-bebdd88454e5.png	75827	FoEO863vyjMlPlEcx-jdPPWzn6UA	15512365611276761	image/png	0	
729-9e61a2d1580c.png	76769	FsZV9QhcTGuAq74ORqTs6aZu21Q1	15533448935124957	image/png	0	
4bb851f7097e13c.jpg	66356	Fqp0T032DfG3hvQmXwayYqaJdx3b	15730361897437573	image/jpeg	0	

我們只需要保留第一列。因此我們需要對源文件處理一下。

我寫了一段代碼來處理文件,輸入文件是 D:\tempfile\t1.txt ,輸出文件是D:\tempfile\t2.txt。代碼如下:

package zhangchao.qiniufile;

import java.io.*;
import java.util.ArrayList;

/**
 * 
 * @author zhangchao
 */
public final class Main {
    public static boolean isBlank(String str) {
        if (null == str) {
            return true;
        }
        if (0 == str.length()) {
            return true;
        }
        if (0 == str.trim().length()) {
            return true;
        }
        return false;
    }

    /**
     * 讀取文件,獲得七牛雲的文件名
     * @return  七牛雲的文件名
     */
    public static ArrayList<String> readFile() {
        ArrayList<String> strList = new ArrayList<String>();
        File inputFile = new File("D:\\tempfile\\t1.txt");
        FileInputStream fis = null;
        BufferedReader br = null;
        try {
            // 讀取文件第一列,文件名
            fis = new FileInputStream(inputFile);
            br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
            String str = null;
            str = br.readLine();
            while (null != str) {
                if (false == isBlank(str)) {
                    str = str.trim();
                    String[] arr = str.split("\t");
                    strList.add(arr[0]);
                }
                str = br.readLine();
            }
            strList.trimToSize();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try{
                if (null != fis) {
                    fis.close();
                }
                if (null != br) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return strList;
    }

    public static void writeFile(ArrayList<String> strList) {
        File outputFile = new File("D:\\tempfile\\t2.txt");
        FileOutputStream fos = null;
        BufferedWriter bw = null;
        try {
            fos = new FileOutputStream(outputFile);
            bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
            for (String str : strList) {
                bw.write(str);
                bw.newLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try{
                if (null != bw) {
                    bw.flush();
                    bw.close();
                }
                if (null != fos) {
                    fos.flush();
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        ArrayList<String> strList = readFile();
        writeFile(strList);
    }
}

運行程序,生成t2.txt 文件。最後執行命令:

qshell batchcopy bucket1 bucket2-a -i t2.txt -w

就可以把文件從甲賬戶複製到乙賬戶。bucket1 是甲賬戶要移出的存儲空間,bucket2-a 是乙賬戶存儲空間bucket2 的重命名空間。-w表示重名文件進行覆蓋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章