Si tengo un archivo pdf como un flujo, ¿cómo puedo escribirlo en el flujo de salida de respuesta?Escribir flujo de PDF en el flujo de respuesta
Respuesta
dado que está utilizando MVC, la mejor manera es utilizar FileStreamResult
:
return new FileStreamResult(stream, "application/pdf")
{
FileDownloadName = "file.pdf"
};
Jugando con Response.Write
o Response.OutputStream
desde su controlador es no-idiomática y no hay razón para escribir su propia ActionResult cuando ya existe .
Por favor, intente éste:
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();
}
}
}
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 utilizar la compresión GZIP para acelerar la transferencia del archivo al cliente (menos bytes transmitidos).
la respuesta HTTP es una corriente expuesta a usted a través de la propiedad HttpContext.Response.OutputStream
, así que si tienes el archivo PDF en una corriente que puede simplemente copiar los datos desde una secuencia a la otra:
CopyStream(pdfStream, response.OutputStream);
Para una implementación de CopyStream
ver Best way to copy between two Stream instances - C#
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()
- 1. Cómo escribir un flujo de bits
- 2. Cómo vaciar el flujo de respuesta de HttpListener?
- 3. ¿Cómo escribir un flujo en un archivo?
- 4. escribir en un flujo de archivo de regresar de getResourceAsStream()
- 5. Diagrama de flujo/diagrama de flujo de JavaScript lib
- 6. Cómo leer el flujo de respuesta antes de que se complete la respuesta Http
- 7. Escribir flujo node.js en una variable de cadena
- 8. C# - pregunta de flujo
- 9. Flujo de control de SSIS frente al flujo de datos
- 10. UML: flujo de control y flujo de objetos
- 11. Retransmisor de flujo inverso
- 12. drools regla de flujo
- 13. Flujo de control COMEFROM
- 14. Flujo básico de Struts
- 15. Control de flujo Ruby
- 16. Restablecer el estado de un flujo
- 17. Haskell comprensión flujo
- 18. Flujo de ejecución de marionetas
- 19. Control de flujo básico en JavaScript
- 20. Flujo de trabajo de Erlang
- 21. malentendido de flujo de código?
- 22. SevenZipSharp - comprime el flujo de memoria
- 23. Cómo rastrear el flujo de scripts
- 24. ¿Cómo implementar el rastreador de flujo óptico?
- 25. Flujo de trabajo de subprogramas de Git
- 26. ¿Cómo escribir/leer bits desde/hacia un flujo? (C#)
- 27. Flujo de proceso/trabajo en Java
- 28. Flujo de trabajo con Symfony2?
- 29. Git flujo de trabajo básico
- 30. caso simple de flujo óptico
bien para formulario web s pero no para mvc – lnu
¿Por qué la longitud de la matriz de bytes es 1024? ¿Qué pasa si su tamaño es más de lo que definió? –
Voto descendente porque el archivo no está cerrado. – arni