如何使用 Java/REST 将 Azure blob 从一个存储容器移动到另一个存储容器?

2024-03-05

有人可以帮忙吗?我正在关注 Java JDK 示例,其中有很多关于如何管理容器和 blob 的示例,但是没有说明如何从一个存储容器移动到另一个存储容器。

例如,我在 StorageOne/ContainerOne/BlobName 上有一个 blob 需要移动到 Storage2/ContainerTwo/BlobName

我正在看这个网站https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/storage/azure-storage-blob/README.md https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/storage/azure-storage-blob/README.md然而没有运气。

我还设法通过 ConnectionString 进行连接并创建、下载 blob,但无法弄清楚如何移动。

任何建议都会有帮助。我也尝试过在Azure中创建一个App Function来做到这一点,但是我的powershell技能并不好。

谢谢


如果要将 blob 从一个存储容器复制到另一存储容器,可以使用开始复制 https://learn.microsoft.com/en-us/java/api/com.azure.storage.blob.specialized.blobasyncclientbase.begincopy?view=azure-java-stable方法,首先获取源 blob url获取BlobUrl https://learn.microsoft.com/en-us/java/api/com.azure.storage.blob.specialized.blobasyncclientbase.getbloburl?view=azure-java-stable方法然后通过它。

如果你想要示例,可以参考这个 github 示例:BlobAsyncClientBaseJavaDocCodeSnippets https://github.com/Azure/azure-sdk-for-java/blob/ffa0c09f48540f438d66eece605fd26bce04075f/sdk/storage/azure-storage-blob/src/samples/java/com/azure/storage/blob/specialized/BlobAsyncClientBaseJavaDocCodeSnippets.java#L62.

如果你想将一个 blob 从源容器移动到另一个容器,并且它不存在于源容器中,目前没有直接的方法可以实现,你可以先复制该 blob,在复制活动之后然后删除源 blobdelete https://learn.microsoft.com/en-us/java/api/com.azure.storage.blob.specialized.blobasyncclientbase.delete?view=azure-java-stable method.

实际上从所有这些方法链接中你可以发现它们都提供了 github 示例,只需遵循项目结构即可。

Update:如果你想要示例代码,你可以参考我下面的代码,我已经测试过它可以工作。

        String connectStr = "storage account connection string";

        // Create a BlobServiceClient object which will be used to create a container client
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("test");

        BlobContainerClient destcontainer=blobServiceClient.getBlobContainerClient("testcontainer");

        PagedIterable<BlobItem> blobs= containerClient.listBlobs();
        for (BlobItem blobItem : blobs) {

            System.out.println("This is the blob name: " + blobItem.getName());
            BlobClient blobClient=containerClient.getBlobClient(blobItem.getName());
BlobServiceSasSignatureValues sas = new BlobServiceSasSignatureValues(OffsetDateTime.now().plusHours(1),
                BlobContainerSasPermission.parse("r"));
        String sasToken = blobClient.generateSas(sas);

            BlobClient destblobclient=destcontainer.getBlobClient(blobItem.getName());
            destblobclient.beginCopy(blobClient.getBlobUrl()+ "?" + sasToken,null);

        }

Update:

        String connectStr = "source storage account connection string";

        String destconnectStr="destination storage account connection string";



        // Create a BlobServiceClient object which will be used to create a container client
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

        BlobServiceClient destblobServiceClient = new BlobServiceClientBuilder().connectionString(destconnectStr).buildClient();

        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("test");

        BlobContainerClient destcontainer=destblobServiceClient.getBlobContainerClient("destcontainer");

        PagedIterable<BlobItem> blobs= containerClient.listBlobs();
        for (BlobItem blobItem : blobs) {

            System.out.println("This is the blob name: " + blobItem.getName());
            BlobClient blobClient=containerClient.getBlobClient(blobItem.getName());
            BlobClient destblobclient=destcontainer.getBlobClient(blobItem.getName());
            destblobclient.beginCopy(blobClient.getBlobUrl(),null);

        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Java/REST 将 Azure blob 从一个存储容器移动到另一个存储容器? 的相关文章

随机推荐

  • gradle build Javadoc 任务因“未知标签:attr”而失败

    我正在尝试建立android autofittextview https github com grantland android autofittextview使用 gradle 从命令行进行项目 然而 每次都失败并出现以下错误 User
  • 列表列表中是否存在某个元素?

    我想查找给定元素是否存在于列表列表中 只有当该元素存在于列表的第一个列表中的某处时 我才得到正确的结果 有什么建议吗 memberlist X X T1 T2 memberlist X H T1 T2 memberlist X T1 T2
  • Backbone.js html 选择/单选更改事件未触发,但单击事件是

    我正在学习骨干 但我一直坚持为 html 选项元素绑定 onchange 事件 我尝试使用 change 或 change id 进行绑定 但这些都没有触发 但是 click 和 click id 事件都有效 div div
  • 如何将命名空间感知设置为 false?

    我正在尝试使用 EclipseLink MOXy 解析一些 XML 但它失败了xsi属性 如果我删除它 它解析得很好 然而 我有 100GiB 的 XML 需要费力地浏览 并且无法更改源文件 有人建议如果我可以设置XmlParser set
  • 将基于标签栏的 iPhone 项目迁移到 iPad

    像许多其他开发人员一样 我创建了使用UITabBarController作为根控制器 选项卡视图使用UINavigationController从列表深入到详细视图 和许多其他开发人员一样 我需要将这些应用程序迁移到 iPad 以便它们利用
  • OCaml 是否复制了自定义块?

    想象一下 我有一个名为 libcat 的 C 库 用于与我的毛茸茸的猫进行交互 因此 我正在为 OCaml 编写绑定来简化与 fluffy 的交互 module type CAT sig type cat val find gt cat v
  • Ansible 模板中的 For 循环

    我有问题 我在模板文件中使用 for for vhost in item server vhost endfor 与项目一起使用文件 yml ansible 中的 with items 但出出是 server d server o serv
  • aspnet 表 - 指定 TableCell 宽度?

    我有一个 asp net 表 我试图将我的列格式化为所有相同的宽度 或者说 4 列分别为 20 30 20 和 30 但是以下代码不起作用
  • android:在imageview中拉伸图像以适合屏幕

    我有一个imageview其高度和宽度设置为fill parent with a linearlayout具有相同的值集 所以我想这应该设置我的图像以适合屏幕 但它只适合 80 横向模式下的顶部和底部边距 我尝试了以下代码但没有成功 Dis
  • 将 textPath 方向从逆时针翻转为顺时针?

    默认情况下 SVG 以逆时针方式将文本环绕路径 文本的天花板粘住了路径 如何将方向更改为顺时针 以使文本的地板粘在圆周上而不是天花板上 textspace letter spacing 5px font family fantasy fon
  • 在 android 和 windows 中使用 sha1prng 给出不同的序列

    我在我的android程序和java程序中都使用了sha1prng作为伪随机数生成器算法 我给它们都设置了相同的值 但是android中生成的序列和java中生成的序列不一样 为什么会发生这种情况 解决这个问题的方法是什么 我认为这是因为
  • 如何使用 ActionCable 作为 API

    我使用 Rails 5 beta 1 和 ActionCable 构建了一个非常简单的应用程序 用于显示用户何时上线并让他们互相发送消息 现在 我基本上想采用 ActionCable 的客户端部分 在另一个应用程序的上下文中实现它 这确实n
  • 将身份添加到现有项目

    我有一个 MVC 项目 我想向其中添加 Identity 但我似乎找不到任何关于如何执行此操作的好文章 有没有一种简单的方法可以将身份添加到现有项目中 我已经有一个数据库 里面有东西 好吧 在一方面 您只需添加 Nuget 包并开始用它编写
  • 在 JScrollPane 中使用绝对布局

    我需要使用具有绝对布局的 JScrollPane 我知道根本不推荐使用 setLayout null 我一直在读到 如果您想在 JScrollPane 中使用绝对布局 则必须设置内部元素的首选大小属性 以便 JScrollPane 可以计算
  • 如何使用 WIX 打包 VSTO Word 插件以进行部署(到 Office 32 位)?

    我开发了一个VSTO Word add in在 VS 2017 Pro 中 工作正常 准备部署 但是 我找不到包装我的工作程序VSTO Word add in用于我的开发机器以外的机器 对于任何特定的机器 我需要部署一次并使其可供任何可能使
  • Istio RequestAuthentication 阻止 envoy sidecar 的就绪状态

    您能帮我理解 RequestAuthentication 吗 当我应用简单的 RequestAuthentication 并重新启动 Pod 时 envoy sidecar 的就绪状态为 false 并且日志抛出warn Envoy pro
  • 在 YAML 中使用 R 代码或 Windows 用户变量(“%userprofile%”)?

    在我的 yaml 调用中我有 title r paste0 Test Done format Sys Date B Y output word document fig caption yes fig height 4 fig width
  • 检查前提条件是否存在原子增量,即原子值小于指定值?

    在新标准 C 原子递增操作中 在递增值之前检查先决条件是否表明原子值小于指定值 我可以比下面的代码更容易 更快吗 int atomic inc std atomic int val int less than int new val int
  • Paypal html按钮自定义字段限制

    限制为 256 个字符customPaypal html 按钮的字段 有没有办法增加该限制 或者是否有其他我可以使用的字段 如custom1 custom2 其他 等 谢谢 不要通过自定义字段发送全部数据 而是将数据保存在数据库中 然后发送
  • 如何使用 Java/REST 将 Azure blob 从一个存储容器移动到另一个存储容器?

    有人可以帮忙吗 我正在关注 Java JDK 示例 其中有很多关于如何管理容器和 blob 的示例 但是没有说明如何从一个存储容器移动到另一个存储容器 例如 我在 StorageOne ContainerOne BlobName 上有一个