8
votes

Enregistrer et afficher l'image de la base de données

Je ne sais pas si ceci est proche ou non. Je crée un champ d'image dans les événements de la table de base de données à l'aide du code xxx

pour un début, je ne suis même pas sûr s'il devrait être une chaîne. Je tente alors d'ajouter l'image à la base de données à l'aide du code xxx

et une fois que cela est ajouté, j'essaie de l'afficher dans un répéteur dans asp.net à l'aide du code xxx

Je crée le répéteur à l'aide du code: xxx < / pré>


3 commentaires

Comment vous attendez-vous à obtenir un URL d'un blob stocké dans la base de données? En outre, vous ne montrez pas le code que charge les données de la base de données.


Il semble que vous enregistrez le nom de fichier image dans dB, cela implique que vous devez enregistrer une image quelque part dans l'emplacement hébergé, dites /img/file.png , si ce qui précède est vrai, alors vous venez de Besoin d'apporter un chemin d'image sur celui récupéré de la DB.


Quel chemin que vous économisez dans votre DB?


7 Réponses :


1
votes

Si votre image est enregistrée comme base de données de chaîne64, la base de données doit ressembler à: "Données: image / png; base64, dataimage". Sinon, vous devez convertir votre tableau d'octets (image en octets) dans la base de données64 et écrire sur la banque ainsi: "Données: image / png; base64, dataimage".

où les donnéesImage seront les données de conversion. Dans ASP.NET, vous devriez utiliser Convert.Tobase64String (octet []).

https://www.base64-image.de/Tutorial


1 commentaires

Merci pour cela bien que je le comprends, je ne sais pas comment la mettre en œuvre dans mon code



6
votes

Suivez ci-dessous étapes,

Dans la base de données, vous devriez avoir, p> xxx pré>

déclarer comme, p> xxx pré>

Changer lors de l'enregistrement, P>

Image1.ImageUrl = "~/ShowImage.ashx?id=" + id;


4 commentaires

Merci pour ça. Lorsque j'essaie d'enregistrer l'image sous forme d'octet [], il apparaît dans la base de données en tant que varbinary et quand je le change à une image, il apparaît toujours comme un varbinaire


Définissez le type de données de colonne d'image en tant qu'image et enregistrez la table.


Merci. J'ai essayé cela et l'enregistré, mais cela convertit toujours le type de données en arrière à Varbinary, même si je l'ai sauvé


Je n'ai pas compris lorsque vous dites que cela convertit le type de données, signifie qu'il convertit le type de données de la colonne de base de données?



1
votes

L'utilisation d'une chaîne est bonne. Je vous recommande de sauvegarder le chemin virtuel de l'image dans la base de données; ce qui signifie que le chemin .NET peut résoudre à un chemin physique sur votre serveur. E. g.

~ / images / myImage.png

où "images" est un dossier de la racine de votre projet .NET.

alors vous pouvez afficher l'image à l'aide de xxx


0 commentaires

0
votes

Si image Enregistrer dans votre solution

<%# Eval("EvtImage", "~/{0}") %>


0 commentaires

2
votes

dans le code derrière écrire une méthode appelée Collection () pour récupérer des images et d'autres champs comme une liste d'événements tels que ci-dessous (il est également préférable d'utiliser à l'aide des déclarations ): xxx

et aussi une classe: xxx

puis pour afficher ces images que vous avez deux choix. Vous pouvez utiliser asp: répéteur avec un asp: objetdatasource comme ceci: xxx

N'oubliez pas de Modifiez le webapplication1 dans le document au nom de votre projet et WebForm8 au nom de votre page.

< Strong> Enfin : Pour tester ce code, vous pouvez créer un nouveau dossier dans votre projet et ajouter des images à cela dans votre base de données dans la colonne EvTimage Stockez-les comme ceci: \ Newfolder1 \ YourfirspicinnewFolder.png et .... Si vous faites ces étapes, vos images doivent être affichées à côté des autres champs du répéteur .


0 commentaires

-1
votes

juste une mise à jour. J'ai utilisé Varbinary à la fin. J'ai ajouté l'image à la base de données en utilisant

<img runat="server" id="imageTest" src="imageIDtagName" />


1 commentaires

Lorsque vous convertissez en base64, il entraînera une grande chaîne. Il va donc ralentir l'application, mieux aller avec Cette solution



0
votes

Vous pouvez enregistrer le fichier image en tant que chaîne indiquant le chemin de l'image étant enregistré dans le dossier du serveur.

Ceci est mon implémentation en utilisant MVC, vous devrez peut-être un peu de modification, mais je pense que la plupart des pièces sont . la même chose p>

la page de Vue: p>

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(YourViewModel model)
{
    var imgName = Path.GetFileName(model.EvtImage.FileName);
    var img = new Bitmap(model.EvtImage.InputStream);
    var imgPath = "";
    // combine file name of event image and the folder path in server
    imgPath = Path.Combine(Server.MapPath("~/Images/Uploads/YourEventName"), imgName);
    img.Save(imgPath);

    cmd.Parameters.AddWithValue("@EvtImage", imgPath);

    // the rest of your implementation
    ....
}


0 commentaires