Warum schreibt CloudBlockBlob.StartCopyAsync manchmal nur 0 Bytes?
Ich habe einen Fall, der manchmal CloudBlockBlob.StartCopyAsyncnur 0-Byte-Daten in den Blob des Eingabe-Assets schreibt ... Was sollte der Fall sein? Also habe ich beschlossen, mit dem Kopieren zu beginnen, während die Block-Blob-Länge nicht erhöht wird ... Irgendwelche Vorschläge?
private async Task CreateInputAssetBlobAsync(UploadRequest request)
{
var cloudBlobContainer = new CloudBlobContainer(request.InputAssetStorageUri);
var blockBlob = cloudBlobContainer.GetBlockBlobReference(request.BlobName);
var storageCredentials = new Microsoft.Azure.Storage.Auth.StorageCredentials(_apiAccess.TempBlobAccountName, _apiAccess.TempBlobContainerKey);
var tempBlobContainer = new CloudBlobContainer(new Uri(_apiAccess.TempBlobContainerAddress), storageCredentials);
var tempBlockBlob = tempBlobContainer.GetBlockBlobReference(request.BlobName);
try
{
await blockBlob.StartCopyAsync(tempBlockBlob);
do
{
if (blockBlob.CopyState.Status == CopyStatus.Pending)
await Task.Delay(1000);
await blockBlob.FetchAttributesAsync();
}
while (blockBlob.CopyState.Status != CopyStatus.Success);
return;
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
Antworten
Sie sollten den folgenden Code verwenden, wenn Sie den Blob-Inhalt kopieren möchten.
Für weitere Informationen können Sie mein Beispiel in Github (BlobContainerCopy) herunterladen . Es funktioniert und ich denke, es ist nützlich für Sie.
Sie können auch auf diesen Beitrag verweisen. Hoffe meine Antwort in diesem Beitrag kann dir auch helfen.
Fehler beim Kopieren des Speicherblobs - Der angeforderte Vorgang ist im aktuellen Status der Entität nicht zulässig
foreach (ICloudBlob sourceBlobRef in sourceBlobRefs)
{
if (sourceBlobRef.Properties.ContentType != null)
{
// Copy the source blob
CloudBlockBlob destBlob = destContainer.GetBlockBlobReference(sourceBlobRef.Name);
try
{
//exception throwed here - StartCopyAsync
await destBlob.StartCopyAsync(new Uri(GetSharedAccessUri(sourceBlobRef.Name, sourceContainer)));
ICloudBlob destBlobRef = await destContainer.GetBlobReferenceFromServerAsync(sourceBlobRef.Name);
while (destBlobRef.CopyState.Status == CopyStatus.Pending)
{
Console.WriteLine($"Blob: {destBlobRef.Name}, Copied: {destBlobRef.CopyState.BytesCopied ?? 0} of {destBlobRef.CopyState.TotalBytes ?? 0}"); await Task.Delay(500); destBlobRef = await destContainer.GetBlobReferenceFromServerAsync(sourceBlobRef.Name); } Console.WriteLine($"Blob: {destBlob.Name} Complete");
}
catch (Exception e)
{
Console.WriteLine($"Blob: {destBlob.Name} Copy Failed");
}
}
}