wyswietlenie zdjecia w servlecie

0

Witam.
Wie ktoś jak można wyświetlić zdjęcie na stronie poprzez servlet?? mając (File f) "f" to moje zdjęcie.

0

Ustaw headery, a potem wypluj zdjęcie na out.

0

http://blog.codebeach.com/2008/02/watermarking-images-in-java-servlet.html - i nawet znak wodny wstawia ;)

Za to kocham Vaadin. po prostu wstawiam Image i mi wisi jak to działa w środku :D

0

Zalozmy ze masz zdjecia w katalogu $contextroot/images/. Stworz sobie np ImageDownloadServlet ktory bedzie zmapowany do url '/images/*'. Servlet ten by bral sciezke, na jej podstawie wczytywal plik i zapisywal go do responsa. Obrazki na stronce beda mialy URL typu "/images/mojobrazek.jpg". Jak pewnie wiesz, kazdy taki obrazek to osobne rzadanie do serwera, ktore w tym przypadku by bylo przetwarzane przez twoj ImageDownloadServlet. Koniec.

0

Jakie headery??
mój kod wyglada tak:
plik.jsp:

<FORM ACTION="NewServlet" METHOD="POST" ENCTYPE="multipart/form-data">
    <br>Zdjęcie: <INPUT type="file" name="obraz" ><br>
<input type="submit" name="ok" value="Wyślij"/>
</FORM>

Servlet:

public class NewServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
        
    response.setContentType("text/html;charset=UTF-8");
    ServletOutputStream out = response.getOutputStream();
    
    String filename = multi.getFilesystemName("obraz");
    String type = multi.getContentType("obraz");

    File f = multi.getFile("obraz");
    out.println("<br>nazwa pliku: "+filename);
    out.println("<br>typ: "+type);

   ?????
}

filename zwraca mi nazwe pliki, type zwraca mi typ pliku
i co teraz aby wyświetlic zdjecie?

0

Napisz co chcesz wlasciwie zrobic, bo z kodu to wyglada jakbys chcial zrobic stronke uploadu zdjec na serwer, i po submicie pokazac zdjecie na stronce. Czy o to chodzi?

0

java.io.File nie przechowuje żadnych danych. Potrzebujesz np FileInputStream albo jakiegoś bufora czy innego InputStream itp itd żeby go wypluć.

0

tak. Wybieram przez przeglądarkę zdjęcie po czym wyświetla się za stronie. Ewentualnie moge zapisać je do bazy danych ale to inny temat i wiem jak to zrobic.

0
               ...
               String filename = multi.getFilesystemName("obraz");
               String type = multi.getContentType("obraz");
               
               
               File f = multi.getFile("obraz");
               out.println("<br>nazwa pliku: "+filename);
               out.println("<br>typ: "+type);
               
               InputStream in = new FileInputStream(f);
               InputStream imageStream = new BufferedInputStream(in);
               Image image = (Image) ImageIO.read(imageStream);
               ???

               lub
               BufferedImage BI = ImageIO.read(f);

ale jak wyswietlic BI lub image ??

0

Juz czaje co chyba ma byc. Chcesz w input podac nazwe pliku ktory jest na serwerze, i w odpowiedzi na submit pokazac ten obrazek?

public class NewServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
       
    response.setContentType("image/png");
    ServletOutputStream out = response.getOutputStream();
   
    String filename = multi.getFilesystemName("obraz");
    String type = multi.getContentType("obraz");

    File f = multi.getFile("obraz");
    out.println("<br>nazwa pliku: "+filename);
    out.println("<br>typ: "+type);

   // ?????
    FileInputStream in = null;
    try {
        in = new FileInputStream(f);
       int read;
        while ((read = in.read()) != -1) {
            out.write(read);
        }
    } catch (IOException exc) {
    } finally {
        if (in != null) {
            in.close();
        }
    }
}

Powyzszy kod nie byl kompilowany wiec moze nie dzialac, ale zasade powinienes wyczaic. Nie wiem tylko czemu ustawiales content type na text/html skoro chcesz wyslac obrazek?

Ogolnie to tylko moj domysl co checsz osiagnac, mam nadzieje ze to tylko w celu pobawienia sie / potestowania, bo gdzie indziej ten use case nie ma wielkiego sensu.

0

Dziękuje. Działa :)

0

Kod powyżej byłby dobry gdyby:

  • wywalić te println z tekstem,
  • response.setContentType(multi.getContentType("obraz")); (tak mi się wydaje),

EDIT:
za późno :P

0

@donek - z setContentType nie do konca zrobilem poprawnie, nie zawsze w koncu bedzie to PNG, wymagany jest jakis sposob wykrycia typu obrazka (nie wiem czy getContentType("obraz") zadziala, nie wiem co to robi ;d. Kod byl dla ilustracji, niemniej masz racje ze powinno byc inaczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1