如何使用 JPA 从 PostgreSQL 读取 bytea 图像数据?

新手上路,请多包涵

我有 PostgreSQL 数据库,并且有一个数据类型为“bytea”的列“image”。我无法修改列或数据库配置。 JPA 注释的 POJO 包含以下映射

@Column(name="image")
private byte[] image;

返回的数据格式如下(这只是一个示例)

 WF5ClN6RlpLZ0hJTUdNQ1FJWmkwcFVGSUdNQ0lDWUE5TUEvanRFeElwK2x0M2tBQUFBQVNVVk9SSzVDWUlJPQo=

当我将此数据写入文件 (.jpeg) 时,照片查看器显示“这是损坏的文件”。我也明白实际的图像字节数据看起来与上面的示例不同。我读了一些博客,其中提到 PostgreSQL 将十六进制转换为 bytea 数据。如何使用或不使用 JPA 将其恢复为原始数据?

数据库 - PostgresSQL 版本 9.5.1

司机

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1205-jdbc41</version>
</dependency>

原文由 Bhushan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

返回的数据看起来好像是 base64 编码的。在写入文件之前,您必须将其解码回二进制数据。

有关解码的更多信息,请查看 此处

原文由 Neothorn 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试用 @Lob

 @Lob
@Column(name="image")
private byte[] image;

如果您使用的是休眠实现,您也可以在列中添加 @Type(type="org.hibernate.type.BinaryType")

 @Lob
@Column(name="image")
@Type(type="org.hibernate.type.BinaryType")
private byte[] image;

原文由 josivan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题