Le plus simple c'est de faire un handler HTTP (.ashx)
Tu récupères l'ID de l'image dans les paramètres de la requête HTTP, tu fais une requête sur la BDD pour obtenir les données de l'image, et tu les envoies sur le flux de la réponse en précisant le Content-Type (par exemple image/png, image/jpeg, etc).
Pour afficher l'image sur le site, tu mets une URL comme ça :
http://tonsite.com/ImageHandler.ashx?imageId=42
Exemple d'implémentation (incomplet et pas testé, c'est juste pour donner une idée) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class ImageHandler : IHttpHandler
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context)
{
int imageId = Convert.ToInt32(context.Request["imageId"]);
byte[] imageBytes;
using (var connection = GetDataBaseConnection())
using (var command = connection.CreateCommand())
{
command.CommandText = "SELECT image_data FROM images WHERE imageId = " + imageId;
connection.Open();
imageBytes = (byte[])command.ExecuteScalar();
}
context.Response.ContentLength = imageBytes.Length;
context.Response.ContentType = "image/png";
context.Response.OutputStream.Write(imageBytes, 0, imageBytes.Length);
}
} |
Partager