[ ghost2k3 @ 17.07.2007. 13:58 ] @
Evo ovako imam bazu sa vec unetim slikama u nju.MySQL. Nisu putanje u pitanju nego slike, sa onim blob tipom.
Napravio sam neke jsp-ove koji nesto rade sa tom bazom i u jednom od njih moram da uzmem sliku iz baze i da je pokazem na stranici. Znam kako da uzmem podatke iz baze, ali mi nije jasno kako da prikazem sliku.
Znaci nesto tipa <img src>, ali samo za ovaj moj slucaj. U stvari ne znam ni da li se uopste i koristi taj tag.
Pitanje verovatno nije tesko, ali ja odgovor ne znam.
Ko je radio s ovim nesto verovatno zna odgovor, a nadam se brzom :D
[ nemnesic @ 18.07.2007. 01:17 ] @
ovo ti nije java pitanje / odgovor.

prijateljski odgovor: nemoj da cuvas slike u DB. sacuvaj path to pic u DB.

ovo ide u cekaonicu sutra
[ ghost2k3 @ 18.07.2007. 08:21 ] @
Kako nije?

Nasao sam odgovor, ako nekog zanima.

<img src="ImageServlet?imageID=<%=rseti.getInt(1)%>"> <-- ovaj red mi je trebao

Treba napraviti ImageServlet, i to je to.
Sa rseti.getInt(1) se uzima imageID, mislim da je ovo jasno, ako nekog interesuje.
ImageServlet mi nesto ne radi, ali proradice :D

Inace nisam ja cuvao slike u bazi, nego sam takvu bazu dobio, pa sam tako i morao da uradim.
[ veljaradenkovic @ 18.07.2007. 08:28 ] @
Mislim da je pitanje sasvim java.

Ja bih ovako (mada nisam do sad) ...

Napravio bih jedan servlet i u njegov out stream upisao ono sto sam procitao iz input stream-a blob polja. Result set treba da ima neku metodu kojom blob polje mozes da dobijes npr. rs.getInputStream(index_polja). Vodi racuna da podesis contenttype sevlet responsa na ono nesto image/gif ili vec sta ti treba.

Ako ti nesto nije jasno javi se ovde popodne pa da napravimo.

Ko sto rekoh ... Nisam nikad. :)
[ ghost2k3 @ 18.07.2007. 10:45 ] @
Evo ovako, servlet nije hteo da radi jer sam zaboravio da ubacim servletSdk.jar u JAVA_HOME/jre/lib/etx.
Mada mi nikakvu gresku nije javljao, samo se pojavi onaj okvir za sliku prazan sa krsticem.
E sad kada sam ubacio servletSdk.jar, nece uopste da mi se prikaze stranica na kojoj se slika nalazi.
Koristim:
- javu 1.5.0
- NetBeans 5.5.1

Prijavi mi sledecu gresku:

Generated servlet error:
C:\ ... \org\apache\jsp\index_jsp.java:92: handlePageException(java.lang.Exception) in javax.servlet.jsp.PageContext cannot be applied to (java.lang.Throwable)
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
^
1 error

EDIT: cim izbacim servletSdk.jar iz java dir, odmah sve radi odlicno, naravno bez slika.

Do pre pola sata sam koristio NB 4.1, koji uopste nije hteo da pokrene web kada je servletSdk iskopiran tamo gde treba, pa sam instalirao 5.5.1 i najnoviju javu koju sam ima.
Sad se sve pokrene, ali kada dodjem na stranicu na kojoj se nalazi slika, trt.

[Ovu poruku je menjao ghost2k3 dana 18.07.2007. u 12:00 GMT+1]
[ zigizig @ 18.07.2007. 16:04 ] @
Ne znam kako si generalno napravio logiku i da li si registrovao servlet u web.xml

U principu sliku iz baze (BLOB) bi trebalo da izvlacis odvojeno od ostalih podataka posebnom metodom.
Sam servlet bi trebao da poziva tu metodu.
Ovo je deo metode:
...
...
Connection conn = "odakle vec dovlacis konekciju";
Statement st = conn.createStatement();
try {
ResultSet rs = st.executeQuery( "select image from <table> where <bla bla>'");
if(rs.next()) {
InputStream input = rs.getBinaryStream(1);
byte [] buffer = new byte[4096];
int x;
while((x=input.read(buffer)) != -1 ) {
out.write(buffer, 0, x);
}
return true;
}
return false;
} finally {
st.close();
}
...
<metoda prima OutputStream i treba da bude public static>

a ovo je deo servleta:
public class ImageServlet extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
...
try {
response.setContentType("image/pjpeg");
ServletOutputStream out = response.getOutputStream();
poziv_prethodne_metode(out);
out.close();
} catch (Exception e) {
e.printStackTrace(); //exception nikad ne ostavljaj prazan
}
...
...

Ovo je jedan od nacina. Valjda ce ti pomoci.
[ ghost2k3 @ 19.07.2007. 09:32 ] @
OK, hvala na odgovoru. Zar ne bi mogao ovako da izvucem sliku?

Code:

          if (rset.next()) {
              contentType = rset.getString(1);
              imageBytes = rset.getBytes(2);
          }



a ovako da je prikazem:

Code:

 ServletOutputStream os = response.getOutputStream();
      os.write(imageBytes);



Doduse ne radi mi sad to trenutno, ali ne znam da li je to problem. Kada ucitam taj jsp gde je to, prikaze mi praznu stranu.
Servlet se zove ImageServlet, a sliku pokusavam da ubacim sa:

Code:

 <img src="ImageServlet?imageID=1">


Dajem fiksno keca kao imageID, da vidim prvo da li to radi pa cu posle i to doraditi.
[ ghost2k3 @ 19.07.2007. 12:19 ] @
Resio sam problem. Kako? Pa izbacio sam servletSdk.jar iz jre/lib/ext, on mi je bio potreban dok sam ima 1.4, sada imam 1.5 javu i izgleda da ne treba ?! Dokle god je on bio tu prijavljivao mi je gresku.
Hvala na pomoci.