【问题标题】:How to copy image from Azure storage account to ARM storage account using Java?如何使用 Java 将图像从 Azure 存储帐户复制到 ARM 存储帐户?
【发布时间】:2017-03-26 10:21:27
【问题描述】:

我想使用 Java 将现有自定义映像从 Azure 经典存储帐户复制到 Azure ARM 存储帐户。 (使用 Java 编程实现 azCopy

【问题讨论】:

    标签: java storage azure-blob-storage azure-resource-manager azcopy


    【解决方案1】:

    听起来您想使用 Java 编程实现下面的azCopy cmdlet。

    Blob:Copy single blob across Storage accounts

    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 编程实现上述 cmdlet 的代码示例。

    复制的关键方法是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());
        }
    
    }
    

    【讨论】:

    • 嗨彼得,非常感谢您的帮助。但我正在努力解决错误“线程“主”com.microsoft.azure.storage.StorageException 中的异常:服务器无法对请求进行身份验证。确保授权标头的值正确形成,包括签名。”你能帮我吗?
    • 否则给我代码将图像从经典存储复制到 ARM 存储....
    猜你喜欢
    • 2021-12-23
    • 2021-06-08
    • 2021-07-27
    • 2021-06-05
    • 2020-07-31
    • 2019-12-30
    • 2021-08-25
    • 2021-04-30
    • 2017-07-08
    相关资源
    最近更新 更多