Escribir secuencia de PDF a la secuencia de respuesta

Si tengo un archivo pdf como Stream, ¿cómo puedo escribirlo en el flujo de salida de respuesta?

Como está utilizando MVC, la mejor manera es usar FileStreamResult :

 return new FileStreamResult(stream, "application/pdf") { FileDownloadName = "file.pdf" }; 

Jugar con Response.Write o Response.OutputStream desde su controlador no es idiomático y no hay razón para escribir su propio ActionResult cuando ya existe uno.

Una forma de hacerlo es la siguiente:

 //assuming you have your FileStream handle already - named fs byte[] buffer = new byte[4096]; long count = 0; while ((count = fs.Read(buffer, 0, buffer.Length)) > 0) { response.OutputStream.Write(buffer, 0, count); response.Flush(); } 

También puede usar la compresión GZIP para acelerar la transferencia del archivo al cliente (menos bytes transmitidos).

En asp.net esta es la manera de descargar un archivo pdf

  Dim MyFileStream As FileStream Dim FileSize As Long MyFileStream = New FileStream(filePath, FileMode.Open) FileSize = MyFileStream.Length Dim Buffer(CInt(FileSize)) As Byte MyFileStream.Read(Buffer, 0, CInt(FileSize)) MyFileStream.Close() Response.ContentType = "application/pdf" Response.OutputStream.Write(Buffer, 0, FileSize) Response.Flush() Response.Close() 

La respuesta HTTP es una secuencia expuesta a usted a través de la propiedad HttpContext.Response.OutputStream , por lo que si tiene el archivo PDF en una secuencia, simplemente puede copiar los datos de una secuencia a la otra:

 CopyStream(pdfStream, response.OutputStream); 

Para una implementación de CopyStream consulte Mejor forma de copiar entre dos instancias de Stream: C #

Por favor, pruebe este:

  protected void Page_Load(object sender, EventArgs e) { Context.Response.Buffer = false; FileStream inStr = null; byte[] buffer = new byte[1024]; long byteCount; inStr = File.OpenRead(@"C:\Users\Downloads\sample.pdf"); while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0) { if (Context.Response.IsClientConnected) { Context.Response.ContentType = "application/pdf"; Context.Response.OutputStream.Write(buffer, 0, buffer.Length); Context.Response.Flush(); } } }