2017-05-14 2 views
0

Ich habe eine Methode, um mein Bild in den Azure-Blobspeicher hochzuladen. Ich habe mein Konto bereits erstellt und einen Namen und einen Schlüssel in meiner App platziert. Das Verhalten, das ich sehe, ist, dass await UploadFromByteArrayAsync(...) zurückgibt und meine Methode gibt eine URL zurück. Wenn ich jedoch zu meinem azurblauen Blob-Speicher im Microsoft Azure Storage Explorer navigiere, kann ich sehen, dass kein Blob erstellt wurde. Offensichtlich gibt das Navigieren zu der von der Methode zurückgegebenen URL auch 404 zurück. Die Methode hat erfolgreich meinen Container erstellt, also gibt es eine bestimmte Verbindung mit passenden Dauerwellen zu meinem Speicherkonto, ich habe den Inhalt des Bytearrays überprüft und er enthält tatsächliche Daten. Weiß jemand, warum mein Bild nie hochgeladen wird?CloudBlockBlob.UploadFromByteArrayAsync gibt zurück, aber kein Bild wurde erstellt

public async Task<string> UploadImage(byte[] imageByteArr) 
{ 
    // Retrieve storage account from the connection string. 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=redacted;AccountKey=redacted;EndpointSuffix=core.windows.net"); 

    // Create the blob client. 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

    // Retrieve a reference to a previously created container. 
    CloudBlobContainer container = blobClient.GetContainerReference("user-images"); 

    // Create the container if it doesn't already exist. 
    await container.CreateIfNotExistsAsync().ConfigureAwait(false); 

    var docId = Guid.NewGuid().ToString(); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(docId); 

    await blockBlob.UploadFromByteArrayAsync(imageByteArr, 0, imageByteArr.Length); 

    blockBlob.Properties.ContentType = "image/jpg"; 
    await blockBlob.SetPropertiesAsync(); 

    return blockBlob.Uri.ToString(); 
} 
+1

Ich bin gespannt, wie Sie diese 'UploadImage' Methode nennen? Warten Sie darauf, dass dieses Finish ausgeführt wird? –

+0

scheint ein Problem mit "Warten auf den Aufruf von UploadImage" zu sein. Versuchen Sie, die Eigenschaft 'Result' für den zurückgegebenen Wert von UploadImage aufzurufen. Für eine detailliertere Erklärung, wie Sie eine asynchrone Methode aufrufen, können Sie diese Antwort überprüfen - http://stackoverflow.com/questions/9343594/how-to-call-asynchronous-method-from-synchronous-method-in-c – alwayslearning

+1

Können Sie nach dem Upload einen Aufruf von blockBlob.ExistsAsync() einfügen, um festzustellen, ob er existiert oder nicht? Sie haben möglicherweise keine Berechtigungen im Browser, um die URL anzuzeigen. – JLaanstra

Antwort

-1

Ich hatte einen Schritt bei der Erstellung des Blobs-Tutorials verpasst, dem ich folgte. Beim Erstellen des Containers im Codebehind müssen wir Folgendes aufrufen, damit wir öffentlich auf das hochgeladene Bild zugreifen können.

container.SetPermissions(
    new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); 
Verwandte Themen