ورود

View Full Version : سوال: نمایش تصاویر ذخیره شده به صورت Blob در JSP



merlin007
شنبه 16 خرداد 1394, 15:55 عصر
چطور تصاویری که به صورت BLob در دیتابیس ذخیره کردم در html نشون بدم؟

راحتترین و سریعترین راه ممکن رو لطفا معرفی کنید
باتشکر

محمد فدوی
یک شنبه 17 خرداد 1394, 10:21 صبح
سلام. با یه سرچ به نتایج خوبی می‌رسید...
لینک (http://stackoverflow.com/a/11192125)

ایده اینه که یه صفحه‌ی jsp داشته باشید که ID رو بگیره و تصویر رو طبق روشی که توی لینک بالاست به عنوان خروجی برگردونه... بعدش توی هر صفحه‌ای که خواستید تصویر رو نمایش بدید کافیه خصوصیت src از تگ img رو به همون صفحه و با همون ID قرار بدید...

موفق باشید.

merlin007
یک شنبه 17 خرداد 1394, 19:45 عصر
نمیدونم چرا جواب نمیده!!

کد JSP :
ایدی عکس رو میفرستم به servlet بدین شکل:
<img src=\"DisplayImage?id="+rs.getObject(1) +"\">"

کد servlet:
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);


String id = request.getParameter("id");
try {
PreparedStatement ps = (PreparedStatement) ConnectionFactory.getConnection().prepareStatement ("select img from table where id='" + id + "'");


ResultSet rs = ps.executeQuery();
if (rs.next()) {
InputStream in = rs.getBinaryStream("img");
OutputStream output = response.getOutputStream();

response.setContentType("image/jpg");
copyFile(in,output);


}
} catch (ClassNotFoundException ex) {
Logger.getLogger(DisplayImage.class.getName()).log (Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DisplayImage.class.getName()).log (Level.SEVERE, null, ex);
}


}


public static boolean copyFile(InputStream inputStream, OutputStream out) {
byte buf[] = new byte[1024];
int len;
long startTime = System.currentTimeMillis();
try {
while ((len = inputStream.read(buf)) != -1) {
out.write(buf, 0, len);
}


long endTime = System.currentTimeMillis() - startTime;
out.close();
inputStream.close();


} catch (IOException e) {


return false;
}
return true;
}

ahmad.mo74
یک شنبه 17 خرداد 1394, 20:37 عصر
کاری که میشه کرد اینه که یه ImageController داشته باشی که id عکس رو بگیره و عکس رو نمایش بده.


import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;


public class ImageController extends HttpServlet {


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("image/jpeg");
String imageId = req.getParameter("id");
try (InputStream imageStream = ImageReader.getImageStream(imageId); //get image from database
ServletOutputStream out = resp.getOutputStream()) {
int read;
byte[] buffer = new byte[1024 * 4];
while ((read = imageStream.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
}
}


}


توی کلاس ImageReader باید از طریق id عکس رو از دیتابیس بگیری.
بهتره به جای عکس، آدرسش رو تو دیتابیس ذخیره کنی.

و توی فایل html یا jsp هم مثلا :


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<img src="${pageContext.request.contextPath}/image?id=123">
</body>
</html>


web.xml :


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">


<servlet>
<servlet-name>imageController</servlet-name>
<servlet-class>com.controller.ImageController</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>imageController</servlet-name>
<url-pattern>/image</url-pattern>
</servlet-mapping>


</web-app>