2010-11-24 15 views
20

Cuando he subido una imagen de mi sitio web que tiene que hacer 2 cosas:Lectura de secuencia dos veces?

  1. leer las dimensiones de imagen
  2. guardar la imagen en la base de datos

el primero que hago es leer del flujo de imágenes en un objeto de imagen, de este modo:

var file = Request.Files["logo"]; 

Image FullsizeImage = Image.FromStream(file.InputStream); 

lo siguiente que hago es para guardar el objeto "archivo" a la base de datos (LINQ to SQL). PERO, cuando trato de guardar la imagen en la base de datos, la secuencia del archivo tiene su posición al final de la secuencia, y parece que no hay datos presentes.

Sé que debería reiniciar el flujo y ponerlo nuevamente en la posición 0, pero ¿cómo lo hago de la manera más eficaz y correcta?

Respuesta

32

Bueno, la forma más sencilla es:

file.InputStream.Position = 0; 

... suponiendo que la secuencia admite la búsqueda. Sin embargo, eso puede hacer cosas interesantes en el Image si no tiene cuidado, ya que conservará una referencia a la transmisión.

Puede que sea mejor que cargue los datos en una matriz de bytes y luego cree dos objetos MemoryStream separados si aún lo necesita. Si está utilizando .NET 4, es fácil copiar una secuencia a otra:

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

¿quiere decir file.InputStream.Position = 0; ? – danielovich

+1

@danielovich: Sí, lo hice, lo siento, corregido. –