Streaming de grandes images à l'aide de ASP.Net Webapi

Nous essayons de retour de gros fichiers d'image à l'aide de ASP.Net WebApi et en utilisant le code suivant dans le flux d'octets pour le client.

public class RetrieveAssetController : ApiController
{

    //GET api/retrieveasset/5
    public HttpResponseMessage GetAsset(int id)
    {
        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
        string filePath = "SomeImageFile.jpg";

        MemoryStream memoryStream = new MemoryStream();

        FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);

        byte[] bytes = new byte[file.Length];

        file.Read(bytes, 0, (int)file.Length);

        memoryStream.Write(bytes, 0, (int)file.Length);

        file.Close();

        httpResponseMessage.Content =  new ByteArrayContent(memoryStream.ToArray());

        httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

        httpResponseMessage.StatusCode = HttpStatusCode.OK;

        return httpResponseMessage;
    }
}

Le code ci-dessus fonctionne bien, mais certains des fichiers que nous avons affaire à 2 GO et vers le haut en taille, résultant dans les délais de connexion. Nous avons utilisé un code similaire à ci-dessous dans le passé (à l'aide de HttpHandlers) pour découper la réponse à la réponse de flux de garder la connexion avec succès.

byte[] b = new byte[this.BufferChunkSize];
int byteCountRead = 0;

while ((byteCountRead = stream.Read(b, 0, b.Length)) > 0)
{
    if (!response.IsClientConnected) break;

    response.OutputStream.Write(b, 0, byteCountRead);
    response.Flush();
}

Comment peut-on utiliser une technique similaire à l'aide de la nouvelle WebAPI modèle de programmation montré plus tôt?

Je vous remercie à l'avance

OriginalL'auteur raj | 2013-02-04