gpt4 book ai didi

java - 在不消耗大量 RAM 的情况下将大文件上传和下载到 PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 13:45:14 24 4
gpt4 key购买 nike

我成功地使用这段 Java 代码上传和下载了文件:

上传

ps = conn.prepareStatement("INSERT INTO DOCUMENT_TEMPLATE_FILES (ID, DOCUMENT_TEMPLATE_ID, FILE_NAME, FILE) "
+ " VALUES (?, ?, ?, ?)");
ps.setInt(1, obj.number);
ps.setInt(2, obj.number);
ps.setString(3, file.getSubmittedFileName());

InputStream inputStream = file.getInputStream();
ps.setBinaryStream(4, inputStream, inputStream.available());

ps.executeUpdate();

下载

ps = conn.prepareStatement("SELECT *, OCTET_LENGTH(FILE) AS FILE_LENGTH FROM DOCUMENT_TEMPLATE_FILES WHERE DOCUMENT_TEMPLATE_ID = ?");

ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
while (rs.next())
{
String file_name = rs.getString("FILE_NAME");
.........

byte[] buffer = new byte[4096];

try (InputStream input = rs.getBinaryStream("FILE");
OutputStream output = response.getOutputStream())
{
int numRead = 0;

while ((numRead = input.read(buffer)) != -1)
{
output.write(buffer, 0, numRead);
}
}

但是当我尝试将它用于 2GB 的文件时,我得到了内存大小的异常。不幸的是,该文件在插入/选择期间存储在 RAM 中。

是否有另一种方法可以在不消耗太多 RAM 内存的情况下解决此问题?

最佳答案

为什么不对可以流式传输的文件使用本地文件系统,而只使用数据库中的文件信息?数据库中的 2GB 文件不是一个好主意,那么您试图通过膨胀表空间来完成什么?只需选择文件名并启动 Streamreader/Streamwriter。

关于java - 在不消耗大量 RAM 的情况下将大文件上传和下载到 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49488757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com