从PostgreSQL的大对象到Spring的ResponseEntity

时间:2017-01-24 18:54:01

标签: java spring postgresql download

我正在试图弄清楚如何上传和下载Spring中实现的REST API,而文件存储在PostgreSQL的大对象中。

到目前为止,我已设法上传文件并将其存储到数据库中。我使用psql\lo_export确保了这一点,并设法将文件保存在硬盘上。但下载部分,我遇到了麻烦。

以下是下载代码的简化版本:

@RequestMapping(value = "/file/{file_id}", method = RequestMethod.GET)
public ResponseEntity download(@PathVariable Long file_id)
{
    Connection con = getConnection();
    con.setAutoCommit(false);
    LargeObjectManager loManager = ((org.postgresql.PGConnection)con).getLargeObjectAPI();
    LargeObject obj = loManager.open(file_id, LargeObjectManager.READ);
    InputStreamResource resource = new InputStreamResource(obj.getInputStream());
    con.commit();
    return ResponseEntity
        .ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"any.file\"")
        .contentLength(obj.size())
        .body(resource);
}

当我调用此API时,我收到错误:

java.io.IOException: org.postgresql.util.PSQLException: ERROR: invalid large-object descriptor: 0

有什么建议吗?

0 个答案:

没有答案