FileUpload a FileStream

Estoy en proceso de enviar el archivo junto con HttpWebRequest. Mi archivo será de la interfaz de usuario de FileUpload. Aquí necesito convertir File Upload a filestream para enviar la secuencia junto con HttpWebRequest. ¿Cómo convierto FileUpload a una cadena de archivos?

Como FileUpload.PostedFile.InputStream me proporciona Stream, utilicé el siguiente código para convertirlo en matriz de bytes

public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[input.Length]; //byte[] buffer = new byte[16 * 1024]; using (MemoryStream ms = new MemoryStream()) { int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } } 

Podría ser mejor canalizar el flujo de entrada directamente a la secuencia de salida:

 inputStream.CopyTo(outputStream); 

De esta manera, no está almacenando en caché todo el archivo en la memoria antes de volver a transmitir. Por ejemplo, aquí es cómo lo escribirías en un FileStream:

 FileUpload fu; // Get the FileUpload object. using (FileStream fs = File.OpenWrite("file.dat")) { fu.PostedFile.InputStream.CopyTo(fs); fs.Flush(); } 

Si quisiera escribirlo directamente en otra solicitud web, podría hacer lo siguiente:

 FileUpload fu; // Get the FileUpload object for the current connection here. HttpWebRequest hr; // Set up your outgoing connection here. using (Stream s = hr.GetRequestStream()) { fu.PostedFile.InputStream.CopyTo(s); s.Flush(); } 

Eso será más eficiente, ya que estará transfiriendo directamente el archivo de entrada al host de destino, sin almacenar primero en la memoria caché o en el disco.

No puede convertir un FileUpload en un FileStream. Sin embargo, puede obtener un MemoryStream de la propiedad FileFile FileUpload. A continuación, puede usar ese MemoryStream para llenar su HttpWebRequest.

Puede poner un archivo FileUpload directamente en un MemoryStream utilizando FileBytes (respuesta simplificada de Tech Jerk)

 using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes)) { //do stuff } 

O si no necesitas un memoryStream

 byte[] bin = FileUpload1.FileBytes;