2008-12-11 16 views
129

Estoy usando un componente de imagen que tiene un método FromBinary. Se pregunta ¿Cómo puedo convertir mi flujo de entrada en una matriz de bytesCómo crear una matriz de bytes desde HttpPostedFile

HttpPostedFile file = context.Request.Files[0]; 
byte[] buffer = new byte[file.ContentLength]; 
file.InputStream.Read(buffer, 0, file.ContentLength); 

ImageElement image = ImageElement.FromBinary(byteArray); 
+0

¿cómo estamos publicando el archivo en otra página .aspx? – shivi

+0

¿Esta línea ** file.InputStream.Read (buffer, 0, file.ContentLength); ** no llena el búfer con bytes del flujo de entrada? ¿Por qué deberíamos usar ** BinaryReader.ReadBytes (...) ** como lo menciona @Wolfwyrd en la respuesta a continuación? ¿No ** ImageElement.FromBinary (buffer); ** soluciona el problema? –

Respuesta

244

Utilice un objeto BinaryReader para devolver una matriz de bytes de la corriente como:

byte[] fileData = null; 
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream)) 
{ 
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength); 
} 
+1

Como se menciona a continuación por jeff, b.ReadBytes (file.InputStream.Length); debe ser byte [] binData = b.ReadBytes (file.ContentLength); como .Longitud es larga, mientras que ReadBytes espera una int. – Spongeboy

+0

Recuerde cerrar el BinaryReader. –

+0

Trabaja como un encanto. Gracias por esta sencilla solución (¡con los comentarios de jeff, Spongeboy y Chris)! – David

3

en su pregunta, tanto en tampón y bytearray parecen ser byte []. Por lo tanto:

ImageElement image = ImageElement.FromBinary(buffer); 
20
BinaryReader b = new BinaryReader(file.InputStream); 
byte[] binData = b.ReadBytes(file.InputStream.Length); 

línea 2 debe sustituirse por

byte[] binData = b.ReadBytes(file.ContentLength); 
10

No funcionará si su InputStream.Position archivo se establece en el final de la secuencia. Mis líneas adicionales:

Stream stream = file.InputStream; 
stream.Position = 0; 
+7

podrías haber hecho 'file.InputStream.Position = 0; ' –

2

antes stream.copyto, debe restablecer stream.position a 0; luego funciona bien.

2

Para las imágenes si el uso de páginas web V2 utilizan el WebImage Class

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream); 
byte[] imgByteArray = webImage.GetBytes(); 
Cuestiones relacionadas