Bonsoir a tous.
J'ai une application struts dont le but est d'uploader une image ensuite de la reécrire sur le flux de sortie afin de la copier dans un repertoire "images" de ma webapp. Je recupere ensuite l'url courante de l'image uploadé a l'aide de la methode getRealPath() afin de la stocké dans le constructeur d'un bean que j'ai appelé image. Ensuite je rajoute ce bean en base de donné et je fait pour terminer un select * sur la table afin d'y afficher ensuite dans un fichier jsp une liste d'image.
J'ai un probleme dans mon action qui gere l'upload, ce qui est bizarre c'est que sous unix et oracle (a l'université) le tout marche très bien, mais chez moi sous windows et postgresql l'action me genere une erreur.
et dans le fichier log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée"
le debut de mon action de mon action fonctionne bien elle me recupere et reecrit l'image uploadé sur le flux de sortie ( et dans mon repertoire dans le serveur), c'est ensuite lorsque je fait le getRealPath(/...) ou lorsque j'instancie mon bean image avec l'url donné par le realPath que sa deconne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2"Servlet.service()" pour la servlet action a généré une exception
Le probleme vient peut etre de l'url qui est mal interpreté par mon bean sous windows
Je vous met mes deux actions celle sous unix qui marché bien et celle sous windows completement identique a peu de chose près (url adapté a windows) afin que vous puissiez voir une eventuelle anomalie dans la partie windows.
Action sous unix (celle qui marche)
Acion sous windows
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198 package org.stirm2.miniProjet.actions; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.net.URL; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.sql.DataSource; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import org.stirm2.miniProjet.beans.ImageForm; import org.stirm2.miniProjet.beans.StrutsUploadForm; import org.stirm2.miniProjet.helpers.ImageHelper; /** * Struts File Upload Action Form. * */ public class StrutsUploadAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ Connection con = null; Statement s = null; ResultSet rs = null; DataSource ds = null; StrutsUploadForm myForm = (StrutsUploadForm)form; // Process the FormFile FormFile myFile = myForm.getTheFile(); String contentType = myFile.getContentType(); String fileName = myFile.getFileName(); int fileSize = myFile.getFileSize(); byte[] fileData = myFile.getFileData(); System.out.println("contentType: " + contentType); System.out.println("File Name: " + fileName); System.out.println("File Size: " + fileSize); //image/jpeg //image/tiff //image/bmp //response.setContentType("image/jpeg"); if (contentType.equals("image/jpeg") || contentType.equals("image/png") || contentType.equals("image/bmp") || contentType.equals("image/tiff") || contentType.equals("image/gif")) { //ServletOutputStream out = response.getOutputStream() ; String urlUploade = "/export/home/users/master/master2/m2pstirm2007/10203126/tomcat/webapps/miniProjet/images/" ; // en fonction du content type FileOutputStream fos = new FileOutputStream(new File(urlUploade + fileName)) ; //FileOutputStream fos = new FileOutputStream(new File("http://localhost:8080/mini-projet/listeImage.jsp/fichier-uploade.jpg")) ; fos.write(fileData) ; fos.close() ; String urlImage = getServlet().getServletContext().getRealPath("/images/" + fileName); /*String chemin = request.getSession().getServletContext().getRealPath("/images/fichier-uploade");*/ //String url = this.servlet.getServletContext().getRealPath("/images/fichier-uploade"); /*JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out) ; BufferedImage image = ImageIO.read((File) myFile) ; Graphics2D g = image.createGraphics() ; enc.encode(image) ; request.setAttribute("aff.image", image);*/ request.setAttribute("affiche.image", urlImage); //lecture de l'image dans une BufferedImage, en utilisant ImageIO BufferedImage nouvelImage = ImageIO.read(new File(urlImage)) ; //récupération de la largeur et de la hauteur de l'image int largeur = nouvelImage.getWidth() ; int hauteur = nouvelImage.getHeight() ; //réduction de l'image d'un facteur 2 Image imageReduite = nouvelImage.getScaledInstance(largeur/2, hauteur/2, Image.SCALE_SMOOTH) ; //création de l'image destination BufferedImage bufferedImageReduite = new BufferedImage(largeur/2, hauteur/2, BufferedImage.TYPE_INT_RGB) ; bufferedImageReduite.getGraphics().drawImage(imageReduite, 0, 0, null) ; String pathMoyenne = "/export/home/users/master/master2/m2pstirm2007/10203126/tomcat/webapps/miniProjet/images/moyenne/" ; //écriture du résultat dans un fichier, au format JPEG ImageIO.write(bufferedImageReduite, "jpg", new File(pathMoyenne + fileName)) ; /**Partie Thumbnails **/ /*Iterator readers = ImageIO.getImageReadersBySuffix(fileName); ImageReader reader = (ImageReader)readers.next(); int imageIndex = 0 ; int thumbnailIndex = 0; BufferedImage bi; bi = reader.readThumbnail(imageIndex, thumbnailIndex); String pathThumbnails = "/export/home/users/master/master2/m2pstirm2007/10203126/tomcat/webapps/miniProjet/images/thumbnails/" ; ImageIO.write(bi, "jpg", new File(pathThumbnails + fileName)) ;*/ //instancie l'image avec l'url de la //destination ou le fichier a ete uploadé ImageForm image = ImageForm.newInstance(urlImage); //Permet de recuperer la session HttpSession session = request.getSession() ; try { ds = getDataSource(request); // Permet de rajouter cette image en base int creeImage = ImageHelper.creeImage(ds, image); } catch (SQLException e) { response.sendError(500, "Exception sur l'accès à la BDD " + e); }finally { if (rs != null) { try { rs.close(); } catch (SQLException e) {} rs = null; } if (s != null) { try { s.close(); } catch (SQLException e) {} s = null; } if (con != null) { try { con.close(); } catch (SQLException e) {} con = null; } } //String url = "http://www.liberation.fr/actualite/societe/_files/file_236953_35775.jpg" ; //lecture de l'image dans une BufferedImage, en utilisant ImageIO /*BufferedImage image = ImageIO.read(new URL(url)) ; //récupération de la largeur et de la hauteur de l'image int largeur = image.getWidth() ; int hauteur = image.getHeight() ; //réduction de l'image d'un facteur 2 Image imageReduite = image.getScaledInstance(largeur/2, hauteur/2, Image.SCALE_SMOOTH) ; //création de l'image destination BufferedImage bufferedImageReduite = new BufferedImage(largeur/2, hauteur/2, BufferedImage.TYPE_INT_RGB) ; bufferedImageReduite.getGraphics().drawImage(imageReduite, 0, 0, null) ; //écriture du résultat dans un fichier, au format JPEG ImageIO.write(image, "jpg", new File("logo.jpg")) ;*/ } // fermeture du if return mapping.findForward("liste.image"); } }
En ce qui me concerne je ne vois vraiment pas donc si quelqu'un peut m'aider ce serait vraiment tres sympa.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198 package org.stirm2.miniProjet.actions; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.net.URL; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.sql.DataSource; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import org.stirm2.miniProjet.beans.ImageForm; import org.stirm2.miniProjet.beans.StrutsUploadForm; import org.stirm2.miniProjet.helpers.ImageHelper; /** * Struts File Upload Action Form. * */ public class StrutsUploadAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ Connection con = null; Statement s = null; ResultSet rs = null; DataSource ds = null; StrutsUploadForm myForm = (StrutsUploadForm)form; // Process the FormFile FormFile myFile = myForm.getTheFile(); String contentType = myFile.getContentType(); String fileName = myFile.getFileName(); int fileSize = myFile.getFileSize(); byte[] fileData = myFile.getFileData(); System.out.println("contentType: " + contentType); System.out.println("File Name: " + fileName); System.out.println("File Size: " + fileSize); //image/jpeg //image/tiff //image/bmp //response.setContentType("image/jpeg"); if (contentType.equals("image/jpeg") || contentType.equals("image/png") || contentType.equals("image/bmp") || contentType.equals("image/tiff") || contentType.equals("image/gif")) { //ServletOutputStream out = response.getOutputStream() ; String urlUploade = "C:\\Program Files\\Apache Software Foundation\\Tomcat 4.1\\webapps\\miniProjet\\images\\" ; // en fonction du content type FileOutputStream fos = new FileOutputStream(new File(urlUploade + fileName)) ; //FileOutputStream fos = new FileOutputStream(new File("http://localhost:8080/mini-projet/listeImage.jsp/fichier-uploade.jpg")) ; fos.write(fileData) ; fos.close() ; String urlImage = getServlet().getServletContext().getRealPath("/images/" + fileName); /*String chemin = request.getSession().getServletContext().getRealPath("/images/fichier-uploade");*/ //String url = this.servlet.getServletContext().getRealPath("/images/fichier-uploade"); /*JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out) ; BufferedImage image = ImageIO.read((File) myFile) ; Graphics2D g = image.createGraphics() ; enc.encode(image) ; request.setAttribute("aff.image", image);*/ request.setAttribute("affiche.image", urlImage); //lecture de l'image dans une BufferedImage, en utilisant ImageIO BufferedImage nouvelImage = ImageIO.read(new File(urlImage)) ; //récupération de la largeur et de la hauteur de l'image int largeur = nouvelImage.getWidth() ; int hauteur = nouvelImage.getHeight() ; //réduction de l'image d'un facteur 2 Image imageReduite = nouvelImage.getScaledInstance(largeur/2, hauteur/2, Image.SCALE_SMOOTH) ; //création de l'image destination BufferedImage bufferedImageReduite = new BufferedImage(largeur/2, hauteur/2, BufferedImage.TYPE_INT_RGB) ; bufferedImageReduite.getGraphics().drawImage(imageReduite, 0, 0, null) ; String pathMoyenne = "C:\\Program Files\\Apache Software Foundation\\Tomcat 4.1\\webapps\\miniProjet\\images\\moyenne\\" ; //écriture du résultat dans un fichier, au format JPEG ImageIO.write(bufferedImageReduite, "jpg", new File(pathMoyenne + fileName)) ; /**Partie Thumbnails **/ /*Iterator readers = ImageIO.getImageReadersBySuffix(fileName); ImageReader reader = (ImageReader)readers.next(); int imageIndex = 0 ; int thumbnailIndex = 0; BufferedImage bi; bi = reader.readThumbnail(imageIndex, thumbnailIndex); String pathThumbnails = "C:\\Program Files\\Apache Software Foundation\\Tomcat 4.1\\webapps\\miniProjet\\images\\thumbnails\\" ; ImageIO.write(bi, "jpg", new File(pathThumbnails + fileName)) ;*/ //instancie l'image avec l'url de la //destination ou le fichier a ete uploadé ImageForm image = ImageForm.newInstance(urlImage); //Permet de recuperer la session HttpSession session = request.getSession() ; try { ds = getDataSource(request); // Permet de rajouter cette image en base int creeImage = ImageHelper.creeImage(ds, image); } catch (SQLException e) { response.sendError(500, "Exception sur l'accès à la BDD " + e); }finally { if (rs != null) { try { rs.close(); } catch (SQLException e) {} rs = null; } if (s != null) { try { s.close(); } catch (SQLException e) {} s = null; } if (con != null) { try { con.close(); } catch (SQLException e) {} con = null; } } //String url = "http://www.liberation.fr/actualite/societe/_files/file_236953_35775.jpg" ; //lecture de l'image dans une BufferedImage, en utilisant ImageIO /*BufferedImage image = ImageIO.read(new URL(url)) ; //récupération de la largeur et de la hauteur de l'image int largeur = image.getWidth() ; int hauteur = image.getHeight() ; //réduction de l'image d'un facteur 2 Image imageReduite = image.getScaledInstance(largeur/2, hauteur/2, Image.SCALE_SMOOTH) ; //création de l'image destination BufferedImage bufferedImageReduite = new BufferedImage(largeur/2, hauteur/2, BufferedImage.TYPE_INT_RGB) ; bufferedImageReduite.getGraphics().drawImage(imageReduite, 0, 0, null) ; //écriture du résultat dans un fichier, au format JPEG ImageIO.write(image, "jpg", new File("logo.jpg")) ;*/ } // fermeture du if return mapping.findForward("liste.image"); } }
Je profite de ce message pour demander une information, en effet un moment dans mon programme je compte faire un traitement sur mon image uploadé.
Ce traitement consiste a la recuperer et la redimensionner en thumbnails a l'aide l api Java ImageIO. Je suis allé sur site consacré a cette API mais sa ne m' a pas vraiment aidé, donc si quelqu'un pourrait me donner un exemple de traitement avec ImageIO pour redimensionner et reecrire une image en thumbnails, ce serait sympa.
Merci d'avance
Cordialement
Partager