Azure Function App使用Java中的startCopy将blob从一个容器复制到另一个容器

时间:2019-09-27 11:09:15

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

我正在使用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);

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

遇到相同的问题,后来从docs

找出来
  

事件网格不是数据管道,也不提供实际的   已更新的对象

事件网格将告诉您某些内容已更改,并且实际消息具有大小限制,并且只要要复制的数据在该限制之内,否则它将成功,否则将为0字节。我最多可以复制1mb,超过0字节则不能复制。您可以尝试查看近来天青是否由于大小限制而增加。

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