我正在试图弄清楚如何上传和下载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
有什么建议吗?