Lire le stream deux fois?

Lorsque j’ai téléchargé une image de mon site Web, je dois faire 2 choses:

  1. lire les dimensions de l’image
  2. enregistrer l’image dans la firebase database

La première chose que je fais est de lire le stream d’images dans un object Image, comme ceci:

var file = Request.Files["logo"]; Image FullsizeImage = Image.FromStream(file.InputStream); 

la prochaine chose que je fais est de sauvegarder l’object “fichier” dans la firebase database (LINQ to SQL). MAIS, lorsque j’essaie d’enregistrer l’image dans la firebase database, le stream du fichier a sa position à la fin du stream et il semble qu’aucune donnée ne soit présente.

Je sais que je devrais un jour réinitialiser le stream et le remettre en position 0, mais comment puis-je le faire de la manière la plus efficace et la plus correcte?

Eh bien, le moyen le plus simple est:

 file.InputStream.Position = 0; 

… en supposant que le stream supporte la recherche. Cependant, cela peut faire des choses intéressantes pour l’ Image si vous ne faites pas attention – car elle aura conservé une référence au stream.

Il peut être préférable de charger les données dans un tableau d’octets, puis de créer deux objects MemoryStream distincts à partir de celui-ci si vous en avez encore besoin. Si vous utilisez .NET 4, il est facile de copier un stream dans un autre:

 MemoryStream ms = new MemoryStream(); Request.Files["logo"].InputStream.CopyTo(ms); byte[] data = ms.ToArray();