MedL
Messages postés9Date d'inscriptionmardi 20 septembre 2016StatutMembreDernière intervention14 octobre 2016
-
Modifié par KX le 20/09/2016 à 21:41
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024
-
22 sept. 2016 à 23:11
comment recuperer une image blob (mysql) dans ma jsp ?
je ne peut pas trouver l'erreur:
servlet:
while(rs.next()){
// "1" because the blob is the only field retrieved by the query :
/*Blob blob = rs.getBlob(6);
InputStream in = blob.getBinaryStream();
Image image = ImageIO.read(in);
return image;
je peut utuliser ca seulment ?*/
byte[] bytes = rs.getBytes(1);
Image img = Toolkit.getDefaultToolkit().createImage(bytes);
ImageIcon icon = new ImageIcon(img);
return icon;
}
.....................
request.setAttribute("form", form);
.......
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024127 20 sept. 2016 à 22:06
Bonjour,
<img src='toto'>
ne fonctionne que si
'toto'
est le nom d'un fichier accessible depuis la page web, mais si
animale.getImg1()
retourne un objet java.awt.Image ça ne peut pas marcher, il faudrait enregistrer cette image dans un fichier temporaire, et mettre dans
<img src
le lien vers ce fichier.
Alternative : au lieu d'enregistrer les bits de tes images en Blob en base de données, tu pourrais les enregistrer en Clob avec un format en Base64 que tu pourrais mettre tel quel dans ta page web.
MedL
Messages postés9Date d'inscriptionmardi 20 septembre 2016StatutMembreDernière intervention14 octobre 2016 21 sept. 2016 à 11:25
merci pour votre reponse ,
mais encore j'ai un petite prblm
quand je recuperer le chemine de l'image j'ai met dans une obj
servlet:
Map map.put("chemin",chemin);
et dans la jsp j'utulise JSTL pour recuperer et j'ai réussi
mais le seule prblm et dans la balise <img....>comme se suit:
jsp :
<img src=${form.map['chemin']}/nom_img.jsp>
//pas d'affichage
malgrer ca ${form.map['chemin']} et le real chemin
merci d'avvance
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024127 21 sept. 2016 à 20:14
Dans le code HTML généré qu'est-ce qui apparaît ?
A priori il te manque les apostrophes de src, ensuite le nom du chemin du fichier il ressemble à quoi ? ça m'étonnerait que ce soit un fichier nom_img.jsp (interne au war), car si tu créés ton fichier à la volée il devrait être dans un répertoire temporaire...
MedL
Messages postés9Date d'inscriptionmardi 20 septembre 2016StatutMembreDernière intervention14 octobre 2016 Modifié par KX le 22/09/2016 à 20:57
salut,j'espair que j'ai pas donnée un bonne explication a mon prblm
voila la methode qui recuperer l'image de bdd,soit type blob ou byte comme je veut :
public class RetriveImg {
public Animales retriveImg(HttpServletRequest request,String paht_servlet)
throws ClassNotFoundException, IOException {
Forum_animals form = new Forum_animals();
String id_user = form.id_user_qeyre(email_origine);//recuperer //id_user
Animales animale = new Animales();
try {
Blob b= retrieveImageByID(id_user,paht_servlet+"imgBDD");
animale.setIg(b);
} catch (Exception e) {
erreurs.put("err_img", e.getMessage());
}
return animale;
}
private Blob retrieveImageByID(String id_user_fk,String path_) throws Exception {
if (id_user_fk == null) {
throw new Exception("DBPicker: can not retrieve an image with part's ID null");
} else {
String url = "jdbc:mysql://localhost:3308/BDD_ANIMALES";
String utilisateur = "utilisateur ";
String motDePasse = "motDePasse ";
Connection connexion = null;
String sql = "select image_animale from animale where id_user_fk= '" + id_user_fk + "' ;";
OutputStream os = null;
Blob image = null;
byte[] imgdata = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connexion = DriverManager.getConnection(url, utilisateur, motDePasse);
Statement statement = connexion.createStatement();
ResultSet rs = statement.executeQuery(sql);
int i = 0;
while (rs.next()) {
image = rs.getBlob(1);
imgdata = image.getBytes(1, (int) image.length());
os = new FileOutputStream(path_+"/" + i + ".jpg");
os.write(imgdata);
i++;
return image;
}
os.flush();
os.close();
} catch (ClassNotFoundException | SQLException ex) {
}
throw new Exception(h + "DBPicker: Warning, image with part's ID : " + id_user_fk + " can not be loaded");
}
}
}
ensuite dans ma servlet j'ai recupere les donner et envoyer ver jsp:
donc j'ai réussi a recuperer les image depuis bdd (mysql) et de copier sur le path de webapp mais pas ou meme path de jsp
donc quelle est la solution pour affichier l'image dans jsp.
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024127 22 sept. 2016 à 22:02
Je ne vois pas l'intérêt de mettre ton image en base de donnée (rapide) si au moment de la traiter tu dois l'enregistrer en fichier sur le disque (lent).
Pour moi, le mieux est d'avoir une deuxième servlet, qui lit l'URL /getImage/12345 va lire le Blob 12345 en base de donnée pour afficher l'image
Ensuite dans ta JSP tu ne t'occupes pas d'afficher l'image, mais tu mets juste le lien vers la servlet d'image
<img src='/getImage/12345'
Lors de l'affichage de la JSP le navigateur va aller chercher chaque image en suivant les liens.