假定有兩個七牛雲賬戶甲、乙。需要把數據從甲轉移到乙。
在七牛雲網站,登錄乙賬戶,進入管理控制檯,如圖:
在管理控制檯,點擊左側菜單的對象存儲,如圖:
在左側的存儲空間列表中,點擊乙賬戶準備接收數據的存儲空間列表,點擊空間授權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表示重名文件進行覆蓋。