使用 Hibernate 将图像保存在数据库中

Posted

技术标签:

【中文标题】使用 Hibernate 将图像保存在数据库中【英文标题】:Saving image in database using Hibernate 【发布时间】:2016-03-17 02:05:13 【问题描述】:

我想使用 Hibernate 将用户上传的图像存储在数据库中。但我不知道该怎么做。这是我的代码

JSP:

<form action="Image" method="post" enctype="multipart/form-data"> <br><br>
<table>
  <tr>
             <td>UserName:  </td>
             <td width='10px'></td>
             <td><input type="text" name="unname"/></td>
  </tr>

  <tr>
             <td>Upload: </td>
             <td width='10px'></td>
             <td><input type="file" name="filecover" value="Upload"/></td>
  </tr>
  <tr>
      <td><input type="submit" value="Submit" name="usubmit"></td>
  </tr>

</table>
</form>

道:

public void savePhoto1(String uname, Blob photo1)

    Session session = NewHibernateUtil.getSessionFactory().openSession();
    Transaction trans =null;
    Newsfeed nf = new Newsfeed(); // Pojo Class
    try 
    
    trans=session.beginTransaction();
    nf.setUsername(uname);
    nf.setPhoto1(photo1);
    trans.commit();

     
    catch (Exception e) 
    

    

在 Servlet 中,

Part filePart = request.getPart("filecover");

在此之后我不知道如何使用 DAO savephoto1 方法添加它.. 谁能帮我继续.. 我需要将图像存储在 mysql blob 字段而不是路径中..

【问题讨论】:

【参考方案1】:

在处理大文件(blob)时,通常将它们映射为字节数组:

Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();

File file = new File("C:\test.png");
byte[] imageData = new byte[(int) file.length()];

try 
    FileInputStream fileInputStream = new FileInputStream(file);
    fileInputStream.read(imageData);
    fileInputStream.close();
 catch (Exception e) 
    e.printStackTrace();


ImageWrapper image = new ImageWrapper();
image.setImageName("test.jpeg");
image.setData(imageData);

session.save(image);    //Save the data

session.getTransaction().commit();
HibernateUtil.shutdown();

你有一个完整的例子,包括阅读图片,在这里:http://howtodoinjava.com/2013/08/30/hibernate-example-of-insertselect-blob-from-database/

【讨论】:

我不是试图从路径中读取图像,而是从用户那里获取图像并尝试保存用户上传的图像

以上是关于使用 Hibernate 将图像保存在数据库中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用hibernate将图像存储到postgres数据库中

使用一对多映射保存对象时出现 Spring + Hibernate id 问题

使用 Hibernate 和 JSP 创建表和数据未保存

Hibernate 之核心接口

Hibernate将对象保存到多个会话

如何使用 Hibernate 将枚举值保存到 DB?