Affichage d'une image qui ne ressemble à rien

Affichage d'une image qui ne ressemble à rien - Java - Programmation

Marsh Posté le 06-10-2005 à 10:48:56    

Bonjour à tous,
 
Je dois récupérer une image sur un serveur par une servlet chargée de l'afficher dans un navigateur. Je procède donc de la manière suivante :
Appel dans la JSP de la servlet avec le nom de l'image en paramètre "f" :

Code :
  1. <p><img src="ImageDownload?f=1128437850272.jpg"></p>


Code de la fonction doGet() de la servlet ImageDownload. Le principe est de lire l'image source et d'afficher au fur et à mesure les caractères lus :

Code :
  1. PrintWriter out = resp.getWriter();
  2. FileReader in = new FileReader("c:\\Temp\\" + req.getParameter("f" ));
  3. int c;
  4. char[] buffer = new char[1];
  5. while ((c = in.read(buffer)) != -1)
  6.         out.write(buffer);
  7. out.close();


Seulement, au mieux l'image affichée ressemble plus à de l'art abstrait qu'à l'originale, au pire elle ne s'affiche pas.
J'ai également essayé les codes suivants mais le résultat est soit identique, soit pire (aucune image ne s'affiche) :

Code :
  1. PrintWriter out = resp.getWriter();
  2. FileReader file = new FileReader("c:\\Temp\\" + req.getParameter("f" ));
  3. BufferedReader in = new BufferedReader(file);
  4. char[] buf = new char[512*1024];
  5. int charsRead;
  6. while ((charsRead = in.read(buf)) != -1)
  7.         out.write(buf, 0, charsRead);


Code :
  1. PrintWriter out = resp.getWriter();
  2. BufferedReader in = new BufferedReader(new FileReader("c:\\Temp\\" + req.getParameter("f" )));
  3. String strTmp;
  4. StringBuffer strBuffer = new StringBuffer();
  5. while((strTmp = in.readLine()) != null)
  6.        strBuffer.append(strTmp);
  7. out.print(strBuffer.toString());
  8. in.close();


Code :
  1. PrintWriter out = resp.getWriter();
  2. BufferedReader in = new BufferedReader(new FileReader(fichier));
  3. char[] buf = new char[512*1024];  // 512K char buffer
  4. int charsRead;
  5. while ((charsRead = in.read(buf)) != -1)
  6.         out.write(buf, 0, charsRead);
  7. in.close();


J'ai aussi essayé sans faire appel à l'image via une balise <IMG> mais en faisant :

Code :
  1. <jsp:include page="<%= request.getContextPath() %>/ImageDownload"><param name="f" value="1128437850272.jpg"></jsp:include>


Les résultats sont similaires. Je ne comprends plus, ça fait une journée que je suis dessus. Pouvez-vous m'aider ?
 
Merci d'avance,
 
@+
Mac Soke
 
PS : J'utilise un serveur Tomcat 4 en local sous Windows XP et je développe avec WSAD.


Message édité par mac soke le 06-10-2005 à 10:52:22
Reply

Marsh Posté le 06-10-2005 à 10:48:56   

Reply

Marsh Posté le 06-10-2005 à 11:46:14    

C'est bon, j'ai trouvé mon bonheur :

Code :
  1. import java.io.*;
  2. import java.util.*;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import com.oreilly.servlet.ServletUtils;
  6. public class ViewFile extends HttpServlet {
  7.   public void doGet(HttpServletRequest req, HttpServletResponse res)
  8.                                throws ServletException, IOException {
  9.     // Use a ServletOutputStream because we may pass binary information
  10.     ServletOutputStream out = res.getOutputStream();
  11.     // Get the file to view
  12.     String file = req.getPathTranslated();
  13.     // No file, nothing to view
  14.     if (file == null) {
  15.       out.println("No file to view" );
  16.       return;
  17.     }
  18.     // Get and set the type of the file
  19.     String contentType = getServletContext().getMimeType(file);
  20.     res.setContentType(contentType);
  21.     // Return the file
  22.     try {
  23.       returnFile(file, out);
  24.     }
  25.     catch (FileNotFoundException e) {
  26.       out.println("File not found" );
  27.     }
  28.     catch (IOException e) {
  29.       out.println("Problem sending file: " + e.getMessage());
  30.     }
  31.   }
  32. // Send the contents of the file to the output stream
  33. public static void returnFile(String filename, OutputStream out)
  34.                            throws FileNotFoundException, IOException {
  35.   // A FileInputStream is for bytes
  36.   FileInputStream fis = null;
  37.   try {
  38.     fis = new FileInputStream(filename);
  39.     byte[] buf = new byte[4 * 1024];  // 4K buffer
  40.     int bytesRead;
  41.     while ((bytesRead = fis.read(buf)) != -1) {
  42.       out.write(buf, 0, bytesRead);
  43.     }
  44.   }
  45.   finally {
  46.     if (fis != null) fis.close();
  47.   }
  48. }
  49. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed