bonjour, j'ai suivi ce tuto pour uploader des images et les mettre en base de données mais j'ai un petit soucis et je ne trouve pas à quel niveau
voici mon code:
Code index.scala.html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ...@helper.form(action = routes.Admin.article, 'enctype -> "multipart/form-data") { <p><input type="file" name="photo"></p> <p><input type="submit"></p> }...
Code controller en java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public static Result article(){ Photos p = new Photos(); Http.MultipartFormData body = request().body().asMultipartFormData(); Http.MultipartFormData.FilePart picture = body.getFile("photo"); if (picture != null) { String contentType = picture.getContentType(); //TODO test contentType pour image File file = picture.getFile(); try{ p.setPhoto(Utils.getArrayByteFromFile(file)); p.save(); }catch (IOException ex){ play.Logger.error("erreur photo",ex); } } ...
et ma classe Utils:
en gros j'ai un formulaire qui envoie au serveur un File, celui ci le récupère, récupère l'image, récupère ses bytes et la place en bd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public class Utils { public static byte[] getArrayByteFromFile(File f) throws IOException { final long length = f.length(); if (length > Integer.MAX_VALUE) { // + de 2 Go throw new IOException("File too big"); } byte[] data = new byte[(int) length]; final FileInputStream in = new FileInputStream(f); try { int off = 0; int len = data.length; int read; do { read = in.read(data, off, len); if (read > 0) { off += read; len -= read; } } while (read >= 0 && len > 0); } finally { in.close(); } return data; } }
tout ça fonctionne sauf que... en bd je me retrouve avec un objet de plus de deux fois la taille de l'image de base et lorsque je la sort de la bd pour l'afficher j'ai une image non reconnu (lorsque je la dl sur disque idem)
mon problème étant que je ne sais pas ou ce problème survient, mon passage de File à byte[] me parait bon, je retrouve bien mon File dans le controller donc ma form doit être bonne et mon save dans la bd est celui de play.models
j'utilise play 2.1.0 sous un serveur ubuntu avec postgresql 9.1.
si quelqu'un passe par ici (play n'est malheureusement pas assez répandu) et à une idée d'ou ça pourrait venir ça me sauverai ma semaine
![]()
Partager