【发布时间】:2017-11-08 09:04:06
【问题描述】:
我需要使用存储库中的自定义查询将图像保存在 postgresql 数据库中。 目前,我将图像保存为具有 mime 类型、文件名的 byte[] 并在同一行中创建 2 个缩略图图像。 对于 Http GET 请求,我需要显示图像,但我需要创建一个 qustom 查询,以便如果我想获取原始图像,我会查询该图像并且不加载存储在数据库中同一表行中的缩略图或文件名.
MyFile 实体:
@Entity
private String name;
private String mimeType;
private byte[] content;
private byte[] thumbnailSm;
private byte[] thumbnailMd;
// getters & setters
存储库:
@Component
public interface MyFileRepository extends JpaRepository<MyFile, Long> {}
目前我在控制器中从 db 获取图像的操作:
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public void getFile(@PathVariable Long id, HttpServletResponse response) throws IOException{
MyFile myFile = myFileRepository.findOne(id);
response.setContentType(myFile.getMimetype());
response.getOutputStream().write(myFile.getContent());
response.getOutputStream().close();
}
问题是当我只需要原始图像时,它会从数据库中加载所有内容(缩略图、名称等)。
我尝试在存储库中创建自定义查询,我尝试使用的 sql 语句是:
@Query(value = "SELECT content FROM file WHERE id=:id")
也试过语句,不知道有什么区别:
@Query(value = "SELECT f.content FROM file f WHERE f.id=:id")
我从数据库中获取字节,但我似乎无法弄清楚如何将它们从存储库接口方法发送到控制器,以便我可以显示图像。 我尝试使用类似的东西:
byte[] findFileById(@Param("id") Long id);
和:
ResponseEntity<byte[]> findFileById(@Param("id") Long id);
所以我的问题是,在 sql 查询从 db 获取图像的字节后,我如何创建一个 sql 查询方法来仅从 db 获取图像而不加载其他内容(缩略图、名称等)? 对不起,如果我的解释令人困惑。
【问题讨论】:
标签: spring postgresql hibernate spring-data-jpa jpql