【问题标题】:How to insert and retrieve image database using jsp/Servlet?如何使用 jsp/Servlet 插入和检索图像数据库?
【发布时间】:2016-08-30 13:37:50
【问题描述】:

我有一个表单页面 index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style>
fieldset
{
      width: 70px;
}
</style>
</head>
<body>
<form action="Upload" method="post" enctype="multipart/form-data">
<fieldset>
<table>
<tr>
<td>Name</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>Select Photo</td>
<td><input type="file" name="photo"></td>
</tr>
<td><input type="submit" value="Upload"></td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>

MyServlet 页面 Upload.java:

import java.sql.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.DriverManager;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet(name = "Upload", urlPatterns = {"/Upload"})
@MultipartConfig(maxFileSize = 169999999)   // upload file's size up to 16MB
public class Upload extends HttpServlet 
{ 
private static final long serialVersionUID = 1L;
PrintWriter out;
InputStream inputStream = null; 
int allField = 0;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse      response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try 
{
out = response.getWriter();
String name=request.getParameter("name");
Part filePart = request.getPart("photo");
if (filePart != null) 
{
System.out.println(filePart.getName());
System.out.println(filePart.getSize());
System.out.println(filePart.getContentType());
inputStream = filePart.getInputStream();
}
Class.forName("com.mysql.jdbc.Driver");  
Connection    con=DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","root") 
PreparedStatement ps = con.prepareStatement("insert into    PhotoDetails(Name,Images)values(?,?)");
ps.setString(1,name);
ps.setBlob(2,inputStream);
ps.executeUpdate();
out.println("Image Inserted");
}
catch(Exception e)
{
out.println(e);
}   
}
}

我正在使用 mysql 数据库,这是我的表:

create table PhotoDetails
(
Name varchar(100),
Images blob
) 

填写完所有表格后,当我点击更新按钮时,我收到此错误:

HTTP 状态 500 - Servlet 执行引发异常

我该如何解决这个问题?

【问题讨论】:

  • 500 是服务器内部错误。因此您必须查看服务器日志文件以了解发生了什么
  • 不确定您的问题是什么。您可以查看此链接:stackoverflow.com/questions/2340406/…
  • 先生,将图像插入数据库时​​,我的代码是否有任何错误?或者你有什么相同的解决方案?

标签: java mysql jsp servlets


【解决方案1】:

这是在 jsp 文件中显示图像的最佳方式。

只需创建 showLogo.jsp 并包括在任何你想要的地方。

<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="java.sql.*,java.io.*,org.apache.struts2.ServletActionContext"%>
<%@ page language="java" import="java.util.*, com.abc.util.dbutil.*,javax.servlet.http.HttpServletRequest" %>
<%

try{
    InputStream sImage;
    ResultSet resultSet = null;
    PreparedStatement pstmt = null;

    DBConnection dbConnection= null;
    dbConnection= new DBConnection();
    Connection con = null;
    con= dbConnection.getConnection();

    ServletInputStream sInIm = null;

      Statement st=con.createStatement();
      String company_id = request.getParameter("company_id");    

      resultSet=st.executeQuery("select logo from company where company_id='" + company_id + "'");

      if(resultSet.next()){
      byte[] bytearray = new byte[1048576];
      int size=0;
      sImage = resultSet.getBinaryStream(1);    
      response.reset();
      response.setContentType("image/jpeg");
      while((size=sImage.read(bytearray))!= -1){
        response.getOutputStream().write(bytearray,0,size);
      }
      response.getOutputStream().flush();
      response.getOutputStream().close();
}
 con.close();
}     
catch(Exception ex){

}
%>

我是这样理解的。

/company/showLogo.jsp?company_id=" id="blah_s" class="logo-small">

从文件中获取图像到 FileInputStream

FileInputStream fs = null;
        try {
            fs = new FileInputStream(getUserImage());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


.................


ps.setBinaryStream(8, fs, fs.available());

插入表(徽标)值(?)

这是用于带有blob列的mysql。

【讨论】:

  • Ravi Thapa 先生,我能知道图像的插入过程吗?我的意思是“将图像插入数据库的代码”并显示您的表格。
猜你喜欢
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2013-04-29
  • 2014-02-23
  • 2016-01-29
  • 1970-01-01
相关资源
最近更新 更多