while (rsimg.next())
{
Blob photo = rsimg.getBlob("thumbnails");
}
之后我需要做些什么来在浏览器中显示图像。
答案 0 :(得分:0)
在servlet
文件中试用此代码,因为它更易于使用并识别错误而不是jsp
import java.sql.*;
import java.io.*;
public class RetrieveImage {
public static void main(String[] args) {
try{
Class.forName("YOUR DRIVER NAME");
Connection con=DriverManager.getConnection(
"URL","USERNAME","PASSWORD");
PreparedStatement ps=con.prepareStatement("select * from TBL_NAME");
ResultSet rs=ps.executeQuery();
if(rs.next()){//now on 1st row
Blob b=rs.getBlob(2); //2 means 2nd column data
byte barr[]=b.getBytes(1,(int)b.length()); //1 means first image
FileOutputStream fout=new FileOutputStream("d:\\IMG_NAME.jpg");
fout.write(barr);
fout.close();
}//end of if
System.out.println("ok");
con.close();
}catch (Exception e) {e.printStackTrace(); }
}
}
现在您可以从上面给出的路径加载图像。
希望这有帮助!!
答案 1 :(得分:0)
要在网络上展示图片,您必须使用' img'标记并填充它的src'属性与图像的相对路径。
现在的问题是,' img'标签不能将二进制数据作为' src'即您的客户端无法直接从数据库访问文件。所以你可以做的是,创建一个从数据库加载文件然后通过HttpServletResponse流式传输文件的Servlet。
您的Servlet看起来像这样:
public class DispalyImage extends HttpServlet {
private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// Code to access database and get blob image.
// String id = HttpServletRequest.getParameter("id");
// select from table where id='id'
Blob photo = rsimg.getBlob("thumbnails");
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType("image/jpeg");
response.setHeader("Content-Length", String.valueOf(photo.length()));
// Prepare streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
// Open streams.
input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
// Write file contents to response.
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
output.close();
input.close();
}
}
}
现在的问题是,您的Servlet如何知道要传输哪个图像?只需将您的密钥作为参数提供给Servlet。该密钥将用于加载您的图像
假设您将提供密钥作为' id',您将图像显示为
<img src="DisplayImage?id=imageId"></img>
您可以使用DisplayImage Servlet中的HttpServletRequest.getParameter(&#34; id&#34;)方法检索id,并使用id从数据库加载图像。
请参阅FileServlet by BalusC,其中包含有关如何从数据库提供文件的很好的示例和解释。