2009-11-27 8 views
0

J'ai enregistré le fichier pdf dans la base de données en utilisant le téléchargement de fichier. maintenant je veux reprendre le fichier pdf de la base de données et il doit être lié aux linkbuttons qui sont créés dynamiquement. donc pour chaque bouton de lien j'ai un fichier pdf lié à celui-ci. - comment faire cela dans asp.net en utilisant C#lien vers le fichier pdf (asp.net)

+4

Vous aurez besoin d'être beaucoup plus précis sur la façon dont le fichier PDF est stocké dans votre base de données avant d'avoir une réponse sensée ici, j'en ai peur. Nous sommes des étrangers ici, donc nous ne savons pas comment fonctionne votre application. –

+1

Quelle base de données utilisez-vous (SQL Server?)? Comment le fichier PDF est-il stocké dans la base de données? Comment sont créés les boutons de lien? –

Répondre

1

D'abord, vous devriez lire les enregistrements de la base de données.

Disons que vous avez la structure de tableau suivant:

Id, Nom, BinaryPdfData

Vous utilisez ADO.NET, Linq2SQL ou tout ce que vous utilisez pour "SELECT" Id et Nom dans un IEnumerable (par exemple un List ou DataSet).

Ensuite, vous liez-un répéteur ASP où le ItemTemplate contient un LinkButton et le code derrière pour l'événement Click aurait vous rediriger vers une page de téléchargement par exemple « downloadpdf.aspx? Id = {0} »

Où {0} correspond à l'ID de l'enregistrement.

La page download.aspx lit l'enregistrement spécifié à partir de la base de données et place les données PDF binaires dans un tableau de tampons.

Ensuite, vous devrez définir le type de contenu etc ...

Je n'ai pas le temps de construire un bon exemple, mais vous aurez probablement besoin ceci:

Response.Clear() 

//set the content type to PDF 
Response.ContentType = "application/pdf" 

//add content type header 
Response.AddHeader("Content-Type", "application/pdf") 

//set the content disposition 
Response.AddHeader("Content-Disposition", "inline;filename=helloworld.pdf") 

//write the buffer with pdf file to the output 
Response.BinaryWrite(Buffer) 

Response.End() 
2

I écrirait un gestionnaire générique qui ira chercher le PDF à partir de la base de données à partir d'un identifiant donné:

public class PdfHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     int id; 
     if (int.TryParse(context.Request["id"], out id)) 
     { 
      id = 0; 
     } 

     var connectionString = ConfigurationManager.ConnectionStrings["some_db"].ConnectionString; 
     using (var connection = new SqlConnection(connectionString)) 
     using (var command = connection.CreateCommand()) 
     { 
      connection.Open(); 
      command.CommandText = "select image from some_table where image_id = :id"; 
      command.Parameters.AddWithValue("id", id); 
      using (var reader = command.ExecuteReader()) 
      { 
       if (reader.Read()) 
       { 
        context.Response.ContentType = "application/pdf"; 
        var cd = new ContentDisposition(); 
        cd.FileName = "test.pdf"; 
        cd.Inline = true; 
        context.Response.AddHeader("Content-Disposition", cd.ToString()); 

        long bytesRead; 
        int size = 1024; 
        var buffer = new byte[size]; 
        long dataIndex = 0; 
        while ((bytesRead = reader.GetBytes(0, dataIndex, buffer, 0, buffer.Length)) > 0) 
        { 
         var actual = new byte[bytesRead]; 
         Buffer.BlockCopy(buffer, 0, actual, 0, (int)bytesRead); 
         context.Response.OutputStream.Write(actual, 0, actual.Length); 
         dataIndex += bytesRead; 
        } 
       } 
       else 
       { 
        context.Response.ContentType = "text/plain"; 
        context.Response.Write("Not found"); 
        context.Response.StatusCode = 404; 
       } 
      } 
     } 
    } 

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

Et dans la page ASPX vient de mettre les ancres qui font référence à ce gestionnaire:

<a href="/PdfHandler.ashx?id=1">pdf 1</a> 
<a href="/PdfHandler.ashx?id=2">pdf 2</a> 
<a href="/PdfHandler.ashx?id=3">pdf 3</a> 
... 
Questions connexes