C# Download fil fra Azure Files Storage.
Jeg har startet et nyt MVC 6 WebAPI projekt, hvor jeg ønsker at streame en fil ud fra et Azure File Share.Men dels får jeg ingen bytes ned fra Azure, dels kan jeg ikke finde ud af at sende dem ud af MVC controlleren.
Jeg havde det til at virke med nuGet pakken WindowsAzure.Storage 4.3.0, men efter jeg opgraderede til 4.4.1 forsvandt alle de synkrone metoder, og alting er nu async - og så virker intet af min kode længere :-/
Jeg har som det kan ses forsøgt at tilpasse mine metoder til at bruge DownloadToStreamAsync frem for den nu fjernede DownloadToStream, men det virker ikke :-/
Jeg er ved at være lidt frustreret over det hele :-\
Det er ikke let at ville være med på den nyeste teknologi bølge...
Her er min metode der kontakter Azure og henter filen:
public async Task<Stream> GetFileStream(string fileName)
{
var uri = new Uri(share.Uri + "/" + fileName);
var file = new CloudFile(uri, credentials);
using (var stream = new MemoryStream())
{
await file.DownloadToStreamAsync(stream);
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
}
Her er min Controller metode:
[HttpGet]
[Route("GetFile")]
public HttpResponseMessage GetFile(string Username, string Password, string FullName)
{
var client = new AzureFilesClient.AzureFilesClient(Username, Password);
Stream azureFileStream = client.GetFileStream(FullName).Result;
var fileName = Path.GetFileName(FullName);
using (HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK))
{
response.Content = new StreamContent(azureFileStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileName };
return response;
}
}
Her er et eksempel på det JSON output jeg får fra Controlleren:
Det ser ud til at den blot serializer response-objektet, frem for at sende det til browseren som det er, som den burde (eller i hvert fald: som jeg ønsker).
{
"Version": {
"Major": 1,
"Minor": 1,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"Content": {
"Headers": [
{
"Key": "Content-Type",
"Value": [
"application/octet-stream"
]
},
{
"Key": "Content-Disposition",
"Value": [
"attachmentx; filename=\"samplefile.docx\""
]
}
]
},
"StatusCode": 200,
"ReasonPhrase": "OK",
"Headers": [],
"RequestMessage": null,
"IsSuccessStatusCode": true
}