Récupérer et afficher une image à partir de la base de données à l'aide de ASP.Net MVC
Je veux récupérer une image à partir de la base de données, puis de l'envoyer à vue et de l'afficher sous forme de vignettes. Voici mon code, mais Il a une erreur et je ne peux pas rendre correctement l'image.
Je suis à l'aide d'ASP.Net MVC et des pages aspx.
Contrôleur :
public ActionResult showImg(int id)
{
var imageData = from m in db.Products
where m.ShopId == 3
select Image.FromStream(new MemoryStream(m.Product_img.ToArray()));
return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
}
Vue :
<img src='<%= Url.Action("showImg", "image", new { id = ViewData["imageID"] } ) %>' />
Avez-vous écarté tout problème de base de données, essayez juste de retour d'un nom de fichier codé en dur à la place d'un flux de mémoire?
Non, c'est juste un test. Je ne les utilise pas coder en dur en situation réelle.
Je sais que vous n'aurez pas envie de coder en dur - mais êtes-vous sûr que ce n'est pas une base de données problème de connexion? Et est votre requête renvoyer exactement ce que vous voulez?
Oui mon ami, j'ai déjà inséré une image dans la table, mais maintenant je veux le récupérer. Les données images rempli avec Système.De dessin.Image, mais FileStreamResult veut revenir (byte[],string). Thats it.
Non, c'est juste un test. Je ne les utilise pas coder en dur en situation réelle.
Je sais que vous n'aurez pas envie de coder en dur - mais êtes-vous sûr que ce n'est pas une base de données problème de connexion? Et est votre requête renvoyer exactement ce que vous voulez?
Oui mon ami, j'ai déjà inséré une image dans la table, mais maintenant je veux le récupérer. Les données images rempli avec Système.De dessin.Image, mais FileStreamResult veut revenir (byte[],string). Thats it.
OriginalL'auteur Doctor | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
Il semble que vous n'avez pas besoin de recréer la
Image
objet dans votre linq déclaration, il suffit de retourner le flux et de le transmettre à votreFileStreamResult
:Ont mis à jour la réponse à tenir compte de cela.
Seulement sans paramètre constructeurs et les initialiseurs sont pris en charge dans LINQ to entities.
Ont mis à jour la réponse, là encore, des perfs MemoryStream de construction à l'extérieur de l'linq déclaration.
OriginalL'auteur Nick
Merci beaucoup Nick. Votre code est maintenant correct. Je l'ai écrit de cette façon :
OriginalL'auteur Doctor