Escrever stream de PDF no stream de resposta

Se eu tenho um arquivo pdf como um stream, como posso escrevê-lo para o stream de saída de resposta?

Como você está usando o MVC, a melhor maneira é usar o FileStreamResult :

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

Jogar com Response.Write ou Response.OutputStream do seu controlador é não-idiomático e não há motivo para escrever seu próprio ActionResult quando um já existe.

Uma maneira de fazer isso é a seguinte:

 //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(); } 

Você também pode usar a compactação GZIP para acelerar a transferência do arquivo para o cliente (menos bytes transmitidos).

Em asp.net este é o caminho para baixar um arquivo 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() 

A Resposta HTTP é um stream exposto a você por meio da propriedade HttpContext.Response.OutputStream , portanto, se você tiver o arquivo PDF em um stream, basta copiar os dados de um stream para o outro:

 CopyStream(pdfStream, response.OutputStream); 

Para uma implementação do CopyStream consulte Melhor maneira de copiar entre duas instâncias de stream – C #

Tente este, por favor:

  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(); } } }