En una de mis aplicaciones web asp.net necesito ocultar la ubicación de un archivo pdf que se está sirviendo a los usuarios.Intentar transmitir un archivo PDF con asp.net está produciendo un "archivo dañado"
Por lo tanto, estoy escribiendo un método que recupera su contenido binario de su ubicación en un sistema CMS y luego vacía una matriz de bytes para el usuario web.
Obtengo, desafortunadamente, un error al descargar la secuencia: "No se pudo abrir el archivo porque está dañado" (o algo similar a eso, al abrir el archivo en Adobe Reader).
Pregunta 1: ¿Qué estoy haciendo mal? Pregunta 2: ¿puedo descargar archivos de gran tamaño usando este enfoque?
private void StreamFile(IItem documentItem)
{
//CMS vendor specific API
BinaryContent itemBinaryContent = documentItem.getBinaryContent();
//Plain old .NET
Stream fileStream = itemBinaryContent.getContentStream();
var len = itemBinaryContent.getContentLength();
SendStream(fileStream, len, itemBinaryContent.getContentType());
}
private void SendStream(Stream stream, int contentLen, string contentType)
{
Response.ClearContent();
Response.ContentType = contentType;
Response.AppendHeader("content-Disposition", string.Format("inline;filename=file.pdf"));
Response.AppendHeader("content-length", contentLen.ToString());
var bytes = new byte[contentLen];
stream.Read(bytes, 0, contentLen);
stream.Close();
Response.BinaryWrite(bytes);
Response.Flush();
}
Por qué no usar el método Response.WriteFile? –
El archivo realmente no existe en el sistema de archivos. – Pablo
Para ser más claros: el archivo existe en la base de datos CMS. Es URL direccionable, pero realmente no puedo recuperar el archivo del sistema de archivos. – Pablo