2009-10-23 5 views

Répondre

2

Vous devez créer une URL qui gère les images et renvoie le contenu de la base de données dans le flux de réponses. Comme il arrive à SQL Saturday #26 j'ai eu une présentation qui a montré exactement cela. Vous pouvez doaloand mes diapositives à partir du lien, allez dans Demo 2 et dans la solution de lotsOfPictures vous trouverez Picture.aspx.cs, qui fait exactement ce que vous demandez:

using (SqlConnection conn = new SqlConnection(connStr)) 
      { 
       conn.Open(); 

       SqlCommand cmd = new SqlCommand(
@"SELECT picture 
FROM resized_pictures 
WHERE picture_id = @id 
AND picture_size = @size;", conn); 
       cmd.Parameters.AddWithValue("@id", pictureId); 
       cmd.Parameters.AddWithValue("@size", size); 

       using (SqlDataReader rdr = cmd.ExecuteReader(
        CommandBehavior.SequentialAccess)) 
       { 
        if (rdr.Read()) 
        { 
         Response.ContentType = "image/jpeg"; 
         byte[] bytes = new byte[1024]; 
         long offSet = 0; 
         int countRead = (int) rdr.GetBytes(
          0, offSet, bytes, 0, 1024); 
         while (countRead > 0) 
         { 
          Response.OutputStream.Write(bytes, 0, countRead); 
          offSet += countRead; 
          countRead = (int)rdr.GetBytes(
           0, offSet, bytes, 0, 1024); 
         } 
        } 
       } 
      } 

Les pièces importantes du puzzle sont l'indicateur SequentialAccess transmis au lecteur SqlCommand qui retournera un vrai flux, de sorte que la page ne charge pas toute l'image en mémoire avant de revenir. Pour un serveur hautes performances, vous devez utiliser des opérations asynchrones, comme décrit dans Asynchronous Pages in ASP.NET 2.0.

0

N'avez pas essayé moi-même, mais que diriez-vous de la diffusion des données dans un fichier temporaire sur le système de fichiers local et de fournir un lien vers ce fichier temporaire?

0

Normalement, vous utiliseriez le code côté serveur pour envoyer le headers approprié, puis renvoyer simplement le contenu.

A partir du manuel PHP:

// We'll be outputting a PDF 
header('Content-type: application/pdf'); 

// It will be called downloaded.pdf 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 

// The PDF source is in original.pdf 
readfile('original.pdf'); 
0

Si votre fichier est stocké dans la base de données, vous stockez probablement comme un tableau de blog ou octet. Dans l'événement de clic de lien hypertexte, vous devez passer le tableau d'octets dans un flux et utiliser un écrivain de flux pour créer le fichier. Ensuite, exécutez le fichier.

Questions connexes