使用java在postgres中将图像保存并检索为字节数组

时间:2017-10-19 13:22:04

标签: java postgresql

请帮助我并举例说明将图像保存为字节数组并检索它们。我正在使用Java和postgre sql是我使用的数据库。\

    if (this.files && this.files[0]) {
        var FR= new FileReader();
        FR.onload = function(e) {
          imageArray[index] =  e.target.result;
          FR.readAsDataURL( this.files[0] );
      }
    });

这用于获取图像..

imageByte1 = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image);

然后回过头来,

new sun.misc.BASE64Encoder().encode(item.getImage1())

这是用来转换。但是out out与我保存的不同。

2 个答案:

答案 0 :(得分:0)

您可以通过外观将二进制文件存储为DB中的base64。使用一对不匹配的输入和输出例程,其中一个甚至不是公共API(com.sun.空间)。

请不要。

使用JDBC对java.sql.Types.BLOB blob,java.sql.PreparedStatement和绑定参数的支持。请。该列的相应PostgreSQL数据类型应为bytea

答案 1 :(得分:0)

在PostGres中,字节数组(字节[])的数据类型为 bytea 。因此,请使用数据类型创建列。

保存:

File file = new File("myimage.gif");
FileInputStream fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("INSERT INTO images VALUES (?, ?)");
ps.setString(1, file.getName());
ps.setBinaryStream(2, fis, (int)file.length());
ps.executeUpdate();
ps.close();
fis.close();

获取:

PreparedStatement ps = conn.prepareStatement("SELECT img FROM images WHERE imgname = ?");
ps.setString(1, "myimage.gif");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    byte[] imgBytes = rs.getBytes(1); OR  byte []out = (byte[])(rs.getObject(1));
    // use the data in some way here
}
rs.close();
ps.close();

帮助:Storing Binary Data