在 Hibernate 中映射 byte[] 并逐块添加文件

发布于 2024-10-03 19:57:36 字数 633 浏览 2 评论 0原文

我有一个按块接收 100 Mb 视频文件的 Web 服务

public void addFileChunk(Long fileId, byte[] buffer)

如何使用 hibernate 将此文件存储在 Postgresql 数据库中?

使用常规 JDBC 非常简单。我将在我的 Web 服务方法中使用以下代码:

 LargeObject largeObject = largeObjectManager.Open(fileId, LargeObjectManager.READWRITE);
                    int size = largeObject.Size();
                    largeObject.Seek(size);
                    largeObject.Write(buffer);
                    largeObject.Close();

How can I receive the same function using Hibernate?并按块存储该文件?

在我看来,将每个文件块存储在单独的行中作为 bytea 似乎不是一个聪明的主意。皮斯的建议。

I have web service which receives 100 Mb video file by chunks

public void addFileChunk(Long fileId, byte[] buffer)

How can I store this file in Postgresql database using hibernate?

Using regular JDBC is very straight forward. I would use the following code inside my web service method:

 LargeObject largeObject = largeObjectManager.Open(fileId, LargeObjectManager.READWRITE);
                    int size = largeObject.Size();
                    largeObject.Seek(size);
                    largeObject.Write(buffer);
                    largeObject.Close();

How can I achieve the same functionality using Hibernate? and store this file by chunk?

Storing each file chunk in separate row as bytea seems to me not so smart idea. Pease advice.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

聚集的泪 2024-10-10 19:57:36

现在建议在数据库中存储 100MB 的文件。我会将它们存储在文件系统中,但考虑到事务处于活动状态,使用 Servlet 似乎是合理的。

  1. 处理 http 请求,以便将文件(收到的文件)存储在某个临时位置。
  2. 打开事务,保留包括临时位置的文件元数据,
  3. 使用某些外部进程关闭事务,该外部进程将监视临时文件,将该文件传输到其最终目的地,用户可以通过某些 Servlet 从该最终目的地使用该文件。

its now advisable to store 100MB files in database. I would instead store them in the filesystem, but considering transactions are active, employing Servlets seems reasonable.

  1. process http request so that file (received one) is stored in some temporal location.
  2. open transaction, persist file metadata including temporal location, close transaction
  3. using some external process which will monitor temporal files, transfer this file to its final destination from which it will be available to user through some Servlet.
那伤。 2024-10-10 19:57:36

请参阅 http://in.relation.to/Bloggers/PostgreSQLAndBLOBs

是的,byteas 会很糟糕。 Hibernate 有一种方法可以继续使用大对象,并且您可以保留流接口。

see http://in.relation.to/Bloggers/PostgreSQLAndBLOBs

Yeah byteas would be bad. Hibernate has a way to continue to use large objects and you get to keep the streaming interface.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文