ejemplo crear array archivo c# file-upload filestream memorystream

c# - crear - ¿Copias MemoryStream a FileStream y guardas el archivo?



memorystream to pdf c# (2)

Debe restablecer la posición de la secuencia antes de copiar.

outStream.Position = 0; outStream.CopyTo(fileStream);

outStream el outStream cuando outStream el archivo usando imageFactory . Esa función outStream el outStream . Mientras se completa el outStream la posición se establece al final del área poblada. Eso es para que cuando continúe escribiendo bytes en el vapor, no anule los bytes existentes. Pero luego, para leerlo (para fines de copia), debe establecer la posición al inicio para que pueda comenzar a leer desde el principio.

No entiendo lo que estoy haciendo mal aquí. Genero un par de secuencias de memoria y en el modo de depuración veo que están llenas. Pero cuando trato de copiar MemoryStream a FileStream para guardar el archivo fileStream no se rellena y el archivo es de 0 bytes de longitud (vacío).

Aquí está mi código

if (file.ContentLength > 0) { var bytes = ImageUploader.FilestreamToBytes(file); // bytes is populated using (var inStream = new MemoryStream(bytes)) // inStream is populated { using (var outStream = new MemoryStream()) { using (var imageFactory = new ImageFactory()) { imageFactory.Load(inStream) .Resize(new Size(320, 0)) .Format(ImageFormat.Jpeg) .Quality(70) .Save(outStream); } // outStream is populated here var fileName = "test.jpg"; using (var fileStream = new FileStream(Server.MapPath("~/content/u/") + fileName, FileMode.CreateNew, FileAccess.ReadWrite)) { outStream.CopyTo(fileStream); // fileStream is not populated } } } }


Si su objetivo es simplemente volcar la secuencia de la memoria a un archivo físico (por ejemplo, para ver los contenidos), se puede hacer en un movimiento:

memoryStream.Position = 0; System.IO.File.WriteAllBytes(@"C://filename", memoryStream.ToArray());