【问题标题】:Azure Function App copy blob from one container to another using startCopy in javaAzure Function App 使用 java 中的 startCopy 将 blob 从一个容器复制到另一个容器
【发布时间】:2020-01-27 17:02:34
【问题描述】:

我正在使用 java 编写一个 Azure Function App,它是 eventgrid 触发器,并且触发器是 blobcreated。因此,一旦创建了 blob,它将被触发,并且功能是将 blob 从一个容器复制到另一个容器。我正在使用 com.microsoft.azure.storage.blob 中的 startCopy 函数。它工作正常,但有时,它用于复制零字节的文件,这些文件实际上包含源位置中的一些数据。所以在目的地有时它会转储零字节的文件。我想对此有所帮助,以便我了解如何处理这种情况

CloudBlockBlob cloudBlockBlob = container.getBlockBlobReference(blobFileName);
CloudStorageAccount storageAccountdest = CloudStorageAccount.parse("something");
CloudBlobClient blobClientdest = storageAccountdest.createCloudBlobClient();
CloudBlobContainer destcontainer = blobClientdest.getContainerReference("something");
CloudBlockBlob destcloudBlockBlob = destcontainer.getBlockBlobReference();
destcloudBlockBlob.startCopy(cloudBlockBlob);

【问题讨论】:

    标签: azure azure-functions azure-blob-storage azure-java-sdk


    【解决方案1】:

    跨存储帐户复制 Blob 是一种异步操作。当您调用 startCopy 方法时,它只是向 Azure 存储发出信号以复制文件。实际的文件复制操作是异步进行的,可能需要一些时间,具体取决于您传输的文件有多大。

    我建议您检查目标 blob 上的复制操作进度,以查看复制了多少字节以及复制操作是否失败。您可以通过获取目标 blob 的属性来做到这一点。如果在 Azure 存储启动复制操作后修改源 blob,则复制操作可能会失败。

    【讨论】:

      【解决方案2】:

      遇到了同样的问题,后来从docs弄明白了

      Event Grid 不是数据管道,不提供实际的 已更新的对象

      事件网格会告诉您发生了一些变化,并且实际消息有大小限制,只要您复制的数据在该限制范围内,它就会成功,否则它将是 0 字节。我能够复制高达 1mb 甚至超过 0 字节。您可以尝试查看最近 azure 是否增加了大小限制。

      但是,如果要复制完整数据,则需要使用事件中心或服务总线。对于我来说,我乘坐的是服务巴士。

      【讨论】:

        猜你喜欢
        • 2020-03-29
        • 2015-07-16
        • 1970-01-01
        • 2020-03-01
        • 2020-07-21
        • 2018-01-03
        • 2020-03-26
        • 2016-11-29
        • 2017-09-10
        相关资源
        最近更新 更多