使用Java v12 SDK在Azure Blob存储中复制Blob

Vzhemevko

我的应用程序位于Kubernetes集群中,并且我正在使用Java v12 SDK与Blob存储进行交互。要使用Blob存储授权,我使用的是托管身份。

我的应用程序需要在一个容器中复制blob。我还没有找到关于如何使用SDK进行复制的任何特定建议或示例

我发现以下方法在使用模拟器时有效

copyBlobClient.copyFromUrl(sourceBlobClient.getBlobUrl());

但是,当它在集群中执行时,出现以下错误

<Error>
   <Code>CannotVerifyCopySource</Code>
   <Message>The specified resource does not exist. RequestId: __ Time: __ </Message>
</Error> 

消息说“资源不存在”,但斑点明显存在。但是,我的容器具有私有访问权限。

现在,当我将公共访问级别更改为“ Blob(仅用于blob的匿名读取访问)”时,一切正常。但是,我无法接受公共访问。

主要问题-使用Java v12 SDK实施复制Blob的正确方法是什么?

在我的情况下,我可能会错过什么或配置错误?

最后是错误消息本身。有一个部分显示“ CannotVerifyCopySource”,它可以帮助您了解具有访问权限的内容,但是消息部分显然具有误导性。它不是应该更明确地显示该错误吗?

Jim Xu

如果要使用Azure JAVA SDK通过Azure MSI复制blob,请参考以下详细信息

  • 在存储帐户之间复制Blob

如果使用Azure MSI在存储帐户之间复制Blob。我们应该采取以下行动

  1. 将Azure分配Storage Blob Data Reader给源容器中的MSI

  2. 将Azure分配Storage Blob Data Contributor给dest容器中的MSI。此外,当我们复制blob时,还需要具有写权限才能将内容写入blob

  3. 为Blob生成SAS令牌。如果源blob是公共的,我们可以直接使用源blob URL,而无需使用sas令牌。

例如

 try {
            BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                    .endpoint("https://<>.blob.core.windows.net/" )
                    .credential(new DefaultAzureCredentialBuilder().build())
                    .buildClient();
            // get User Delegation Key
            OffsetDateTime delegationKeyStartTime = OffsetDateTime.now();
            OffsetDateTime delegationKeyExpiryTime = OffsetDateTime.now().plusDays(7);
            UserDelegationKey key =blobServiceClient.getUserDelegationKey(delegationKeyStartTime,delegationKeyExpiryTime);

            BlobContainerClient sourceContainerClient = blobServiceClient.getBlobContainerClient("test");
            BlobClient sourceBlob = sourceContainerClient.getBlobClient("test.mp3");
            // generate sas token
            OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
            BlobSasPermission permission = new BlobSasPermission().setReadPermission(true);

            BlobServiceSasSignatureValues myValues = new BlobServiceSasSignatureValues(expiryTime, permission)
                    .setStartTime(OffsetDateTime.now());
            String sas =sourceBlob.generateUserDelegationSas(myValues,key);

            // copy
            BlobServiceClient desServiceClient = new BlobServiceClientBuilder()
                    .endpoint("https://<>.blob.core.windows.net/" )
                    .credential(new DefaultAzureCredentialBuilder().build())
                    .buildClient();
            BlobContainerClient desContainerClient = blobServiceClient.getBlobContainerClient("test");
            String res =desContainerClient.getBlobClient("test.mp3")
                    .copyFromUrl(sourceBlob.getBlobUrl()+"?"+sas);
            System.out.println(res);
        } catch (Exception e) {
            e.printStackTrace();
        }

在此处输入图片说明

  • 复制到同一帐户

如果将副本与Azure MSI复制到同一存储帐户中,建议您将其分配Storage Blob Data Contributor给该存储帐户中的MSI。然后,我们可以使用方法执行复制操作copyFromUrl

例如

一种。Storage Blob Data Contributor在帐户级别分配给MSI

b。

  try {
            BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                    .endpoint("https://<>.blob.core.windows.net/" )
                    .credential(new DefaultAzureCredentialBuilder().build())
                    .buildClient();

            BlobContainerClient sourceContainerClient = blobServiceClient.getBlobContainerClient("test");
            BlobClient sourceBlob = sourceContainerClient.getBlobClient("test.mp3");

            BlobContainerClient desContainerClient = blobServiceClient.getBlobContainerClient("output");
            String res =desContainerClient.getBlobClient("test.mp3")
                    .copyFromUrl(sourceBlob.getBlobUrl());
            System.out.println(res);
        } catch (Exception e) {
            e.printStackTrace();
        }

在此处输入图片说明

有关更多详细信息,请参考此处此处

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用.NET v12 SDK在具有指定ContentType的Azure Blob存储中上传Blob?

来自分类Dev

在Azure Blob存储v12中未计算的ContentHash

来自分类Dev

如何使用最新的Azure SDK .NET API v12在Blob上获取共享访问签名?

来自分类Dev

使用适用于.NET的Azure Blob存储客户端库v12下载blob

来自分类Dev

如何检查Azure Blob存储V12中是否存在容器

来自分类Dev

如何从适用于Node.js的Azure blob v12 SDK删除blob

来自分类Dev

使用12.x版Azure存储库使用密钥库解密Azure Blob存储中的Blob

来自分类Dev

如何在Azure SDK v12中并行上传块大文件?

来自分类Dev

使用 SDK 在 azure 函数中将 Azure blob 存储到 JSON

来自分类Dev

如何使用 Odata 链接服务将文件从共享点复制到 blob 存储 azure 数据工厂 v2

来自分类Dev

使用 Java 在 Azure Blob 存储中读取文件的文件属性

来自分类Dev

是使用Azure SDK v1.8页面Blob还是块Blob创建的Blob?

来自分类Dev

Azure Blob存储V12-使用特殊类BlockBlobStorage的示例

来自分类Dev

Azure Blob存储:在同一Azure存储帐户中使用访问层ARCHIVE复制Blob无法正常工作

来自分类Dev

如何使用Azure Blob存储SDK将Blob从一个容器复制到另一个容器

来自分类Dev

使用适用于Java的Azure存储SDK将VM页面Blob从一个Azure订阅复制到另一个

来自分类Dev

使用快照复制Azure Blob

来自分类Dev

Azure Blob存储:地理复制

来自分类Dev

使用Https的Azure Blob存储

来自分类Dev

如何使用 Node.js SDK 从 Azure Blob 存储读取附加 Blob 到字符串?

来自分类Dev

在Azure函数中使用Python根据Azure Blob存储中的模式匹配检查Blob的存在

来自分类Dev

JSON_VALUE()在SQL Azure v12中停止工作了吗?

来自分类Dev

JSON_VALUE()在SQL Azure v12中停止工作了吗?

来自分类Dev

在Azure中访问Blob存储是否使用带宽?

来自分类Dev

使用API在Azure Blob存储中编辑文件

来自分类Dev

使用不带Azure SDK的REST API将流上传到Azure Blob存储

来自分类Dev

Azure 使用 rest API 将 blob 从一个存储帐户复制到同一订阅中的另一个

来自分类Dev

Nodejs Azure存储将Blob复制到新Blob

来自分类Dev

如何使用Java在Azure Blob存储中创建/删除共享访问策略?

Related 相关文章

  1. 1

    如何使用.NET v12 SDK在具有指定ContentType的Azure Blob存储中上传Blob?

  2. 2

    在Azure Blob存储v12中未计算的ContentHash

  3. 3

    如何使用最新的Azure SDK .NET API v12在Blob上获取共享访问签名?

  4. 4

    使用适用于.NET的Azure Blob存储客户端库v12下载blob

  5. 5

    如何检查Azure Blob存储V12中是否存在容器

  6. 6

    如何从适用于Node.js的Azure blob v12 SDK删除blob

  7. 7

    使用12.x版Azure存储库使用密钥库解密Azure Blob存储中的Blob

  8. 8

    如何在Azure SDK v12中并行上传块大文件?

  9. 9

    使用 SDK 在 azure 函数中将 Azure blob 存储到 JSON

  10. 10

    如何使用 Odata 链接服务将文件从共享点复制到 blob 存储 azure 数据工厂 v2

  11. 11

    使用 Java 在 Azure Blob 存储中读取文件的文件属性

  12. 12

    是使用Azure SDK v1.8页面Blob还是块Blob创建的Blob?

  13. 13

    Azure Blob存储V12-使用特殊类BlockBlobStorage的示例

  14. 14

    Azure Blob存储:在同一Azure存储帐户中使用访问层ARCHIVE复制Blob无法正常工作

  15. 15

    如何使用Azure Blob存储SDK将Blob从一个容器复制到另一个容器

  16. 16

    使用适用于Java的Azure存储SDK将VM页面Blob从一个Azure订阅复制到另一个

  17. 17

    使用快照复制Azure Blob

  18. 18

    Azure Blob存储:地理复制

  19. 19

    使用Https的Azure Blob存储

  20. 20

    如何使用 Node.js SDK 从 Azure Blob 存储读取附加 Blob 到字符串?

  21. 21

    在Azure函数中使用Python根据Azure Blob存储中的模式匹配检查Blob的存在

  22. 22

    JSON_VALUE()在SQL Azure v12中停止工作了吗?

  23. 23

    JSON_VALUE()在SQL Azure v12中停止工作了吗?

  24. 24

    在Azure中访问Blob存储是否使用带宽?

  25. 25

    使用API在Azure Blob存储中编辑文件

  26. 26

    使用不带Azure SDK的REST API将流上传到Azure Blob存储

  27. 27

    Azure 使用 rest API 将 blob 从一个存储帐户复制到同一订阅中的另一个

  28. 28

    Nodejs Azure存储将Blob复制到新Blob

  29. 29

    如何使用Java在Azure Blob存储中创建/删除共享访问策略?

热门标签

归档