2012-03-05 5 views
5

estoy desarrollando una aplicación web en la que necesito almacenar archivos de imagen y algunos otros documentos en una base de datos y luego tengo que mostrarlos en una página web preferiblemente en un cuadro de imagen. He almacenado imágenes en la base de datos y también archivos PDF en forma de matriz de bytes y he usado un Generic Handler para obtener una matriz de bytes de la base de datos y luego mostrarlos en un cuadro de imagen. Funciona bien para las imágenes pero no funciona con archivos PDF .¿Cómo mostrar la matriz btye de PDF almacenada en SQL Server a asp.net WebForm en un cuadro de imagen?

public class ShowImage : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     Int32 imgID; 
     if (context.Request.QueryString["id"] != null) 
      imgID = Convert.ToInt32(context.Request.QueryString["id"]); 
     else 
      throw new ArgumentException("No parameter specified"); 

     context.Response.ContentType = "image/jpeg"; 
     byte[] buffer = ShowEmpImage(imgID); 
     context.Response.BinaryWrite(buffer); 
    } 

    public Stream ShowEmpImage(int empno) 
    { 
     dbClass db = new dbClass(); 
     string sql = "SELECT imgfile FROM myFiles WHERE id = @ID"; 
     SqlCommand cmd = new SqlCommand(sql, db.con); 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.AddWithValue("@ID", empno); 
     object img = null; 
     try 
     { 
      db.Connect(); 
      img = cmd.ExecuteScalar(); 
     } 
     catch 
     { 
      return null; 
     } 
     finally 
     { 
      db.Disconnect(); 
     } 
     return new MemoryStream((byte[])img); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

favor me guía cómo puedo mostrar archivos PDF y otros archivos en el cuadro de imagen? En realidad, el problema es que mi aplicación se ejecuta con la aplicación existente y que no tiene forma de almacenar extensiones de archivos, así que la única forma de que pueda mostrar archivos es "mostrarlos como una imagen", pero si es una mejor manera, entonces ayúdenme amigos. .

Respuesta

1

Hay un motivo por el que el PDF no funciona cuando lo representa como una imagen ... no es una imagen. Además, afirmar que es "image/jpeg" va a hacer que se rompa bastante a menos que el navegador haga una comprobación explícita del encabezado de archivo y realmente necesite reparar la IMO. Si actualmente no almacena el nombre/extensión/MIME/algo del archivo, francamente: ese es un problema que debe solucionar.

Para mostrar un PDF, sospecho que necesitaría usar un en lugar de un <img>, que a: podría no funcionar en todos los navegadores, yb: podría no ser muy conveniente para la persona que llama. Personalmente, solo ofrecería un enlace de descarga (y en el controlador, use content-disposition para decirle al navegador que lo trate como una descarga).

+0

dime cómo puedo mostrarlo sin límite de navegador? Necesito mostrar ambos archivos de imagen o PDF en mi página web, ¿cuál es la mejor manera de mostrarlos en la página web? –

+0

@AqEeL si desea visualizar una * imagen * del PDF, quizás [consulte aquí] (http://stackoverflow.com/questions/1255322/create-pdf-thumbnail-with-c-sharp). De otra manera; utilice un '