-1

Java を使用して、既存のカスタム イメージを Azure クラシック ストレージ アカウントから Azure ARM ストレージ アカウントにコピーしたいと考えています。( JavaプログラミングによるazCopyの実装)

4

1 に答える 1

0

azCopyJava プログラミングを使用して以下のコマンドレットを実装したいようです。

BLOB:ストレージ アカウント間で単一の BLOB をコピーする

AzCopy /Source: https://sourceaccount.blob.core.windows.net/mycontainer1 /Dest: https://destaccount.blob.core.windows.net/mycontainer2 /SourceKey:key1 /DestKey:key2 /Pattern:abc. TXT

参考までに、 Azure Storage Client SDK for Javaに依存する Java プログラミングを使用して上記のコマンドレットを実装するコード サンプルを次に示します。

コピーの主な方法はCloudBlob.startCopy.

import java.net.URI;
import java.net.URISyntaxException;
import java.security.InvalidKeyException;
import java.util.HashMap;
import java.util.Map;

import com.microsoft.azure.storage.StorageCredentials;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.StorageUri;
import com.microsoft.azure.storage.blob.CloudBlob;
import com.microsoft.azure.storage.blob.CloudBlockBlob;

public class AzCopySample {

    private static final String STORAGE_CONNECTION_STRING_TEMPLATE = "DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s;";

    public static CloudBlob genBlobReference(Map<String, String> cmdOptions, String option) throws URISyntaxException, InvalidKeyException, StorageException {
        URI uri = new URI(cmdOptions.get(option));
        String host = uri.getHost();
        String account = host.substring(0, host.indexOf("."));
        String key = cmdOptions.get(option+"Key");
        String connectionString = String.format(STORAGE_CONNECTION_STRING_TEMPLATE, account, key);
        StorageCredentials credentials = StorageCredentials.tryParseCredentials(connectionString);
        StorageUri storageUri = new StorageUri(uri);
        CloudBlob blob = new CloudBlockBlob(storageUri, credentials);
        return blob;
    }

    public static void main(String[] args) throws URISyntaxException, InvalidKeyException, StorageException {
        String command = "AzCopy /Source:https://sourceaccount.blob.core.windows.net/mycontainer1 /Dest:https://destaccount.blob.core.windows.net/mycontainer2 /SourceKey:key1 /DestKey:key2 /Pattern:abc.txt";
        String[] cmdItems = command.split(" ");
        Map<String, String> cmdOptions = new HashMap<>();
        for(int i = 1; i < cmdItems.length; i++) {
            String cmdItem = cmdItems[i];
            int index = cmdItem.indexOf(":");
            String key = cmdItem.substring(0, index);
            String value = cmdItem.substring(index+1);
            cmdOptions.put(key, value);
        }
        CloudBlob source = genBlobReference(cmdOptions, "/Source");
        CloudBlob dest = genBlobReference(cmdOptions, "/Dest");
        dest.startCopy(source.getUri());
    }

}
于 2016-11-14T08:00:50.107 に答える