首页 > 解决方案 > 如何使用 servlet 和 jsp 从任何本地 c 或 d 驱动器或系统的任何文件夹将用户配置文件图像上传到 sql 数据库

问题描述

当我单击提交按钮以插入用户详细信息时,我想将用户个人资料图片的图像上传到 sql 数据库中。我编写代码仅从特定 d 文件夹中获取图像以在此处上传图像 我编写代码以上传图像但出现错误( u.setImage(5, (InputStream)fs1, fs1.available());)我还想从系统的任何驱动器上传图像并存储到 sql 数据库中。

小服务程序编码:

        @WebServlet(urlPatterns = {"/Insert"})
    public class Insert extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
           response.setContentType("text/html");  
            PrintWriter out=response.getWriter();  
              
                ServletContext context = getServletContext();
            String dirName =context.getRealPath("d://Photo/");
          try
        {  
            String name = request.getParameter("name");  
            String address = request.getParameter("address");
            String phone = request.getParameter("phone");
            String image = request.getParameter("image"); 
            String password = request.getParameter("password");
            
            String fPath = "d:\\Photo\\" + image;
            System.out.println("insert! "+image);
         
            User u=new User();
            u.setName(name);
            u.setAddress(address);
            u.setPhone(phone);
            u.setImage(fPath);
            u.setPassword(password);  
           
            int i=UserDao.save(u);
        
           if(i>0)
            {  
            
                request.getRequestDispatcher("user-list.jsp").include(request, response);  
            }
            else
            {  
            out.println("Sorry! unable to insert record"); 
           
            }
        }
            catch(Exception e)
            {
                e.printStackTrace();
            }
          
        out.close();  
    }

}

用户道代码:

     public static int save(User u) throws FileNotFoundException{  
    int status=0;
    
    File file1 = null;
    FileInputStream fs = null, fs1=null;
    String img = u.getImage();
    System.out.println("userdao! "+img);
    file1 = new File(img);
    fs = new FileInputStream(file1);
    
    try{   
       Connection con=getConnection();
            PreparedStatement ps = con.prepareStatement(INSERT_USERS);
            ps.setString(1, u.getName());
            ps.setString(2, u.getAddress());
            ps.setString(3, u.getPhone());
            ps.setObject(4, null);
            fs = new FileInputStream(img);
            System.out.println(fs);
            fs1=fs;
             ps.setBinaryStream(4, (InputStream)fs1, fs1.available());
            ps.setString(5, u.getPassword());
            
            status=ps.executeUpdate();  
    }catch(Exception e){System.out.println(e);}  
    return status;  
}

标签: javaservlet-3.0

解决方案


您不应该将图像真正存储在数据库中。这是一个非常糟糕的做法,数据库的性能会最差。而是使用这种类型的东西:

  1. 您从用户那里获取图像并将其转换为字节数组
  2. 您将字节数组发送到服务器
  3. 然后服务器将字节数组转换为文件并将文件保存到服务器的目录
  4. 并将文件的位置保存为数据库中的字符串

现在发送给客户端:

  1. 从存储的位置获取文件
  2. 将其转换为字节数组
  3. 将字节数组发送给客户端

推荐阅读