2016-04-05 6 views
1

Ich bin über eine POST-Anfrage eine PDF-Datei zu meinem WebAPI-Controller sende mit Angular als solche:Azure Blob Storage - Hochladen Http/StreamContent zu einem CloudBlockBlob von WebAPI-Controller

$scope.upload = Upload.upload({ 
     url: "../api/Locker/Upload", // webapi url 
     method: "POST", 
     file: controllerFile, 
    }) 

das in meiner POST-Methode auf meinem Controller erhalte ich die StreamContent dieser Datei wie folgt:

public async Task<HttpResponseMessage> Post() 
    { 
     HttpRequestMessage request = this.Request; 
     if (!request.Content.IsMimeMultipartContent()) 
     { 
      request.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
     } 

     var result = await Request.Content.ReadAsMultipartAsync<CustomMultipartFormDataProvider>(new CustomMultipartFormDataProvider()); 

     string fileName = result.FileData[0].Headers.ContentDisposition.FileName; 
     var fileData = result.Contents[0]; 

} 

es sagt, dass results.Contents [0] vom Typ HttpContent aber in dem Direkt-Fenster, wenn ich filedata geben sie sagt, es von StreamContent Typ ist.

Ich versuche, diese fileData auf Azure Blob Storage hochzuladen, damit ich sie später mit einer GET-Anfrage abrufen kann, habe aber Probleme damit.

//in post method 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(blobConnectionString); 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    CloudBlobContainer container = blobClient.GetContainerReference(blobContainer); 
    await container.CreateIfNotExistsAsync(); 

    string blobId = Guid.NewGuid().ToString(); 

    UploadToBlob(container, blobId, fileData); 

und Verfahren, wo ich stecke:

private async void UploadToBlob(CloudBlobContainer container, string blobId, HttpContent fileData) 
    { 
     CloudBlockBlob block = container.GetBlockBlobReference(blobId); 
     block.UploadFromStream(fileData); 
    } 

Fehler auf block.UploadFromStream weil filedata kein Strom natürlich ist.

Was kann ich tun, wenn ich eine HTTP-Antwort mit Inhalt Wesen vom Typ erwarten: Arraybuffer, so dass ich die Datei in meiner Web-Anwendung belichten kann, wie:

//angular get request 
.success(function (data, status, headers, config) { 
     // file is uploaded successfully 
     console.log(data); 

     var fileBack = new Blob([(data)], { type: 'application/pdf' }); 
     var fileURL = URL.createObjectURL(fileBack); 
} 

Antwort

2

Was block.UploadFromStream (await fileData.ReadAsStreamAsync())?