java - 如何使用 SpringBoot 和 React 从 PostGreSQL 数据库中最有效地加载图像
问题描述
我将使用 React 加载到 Spring 后端的图像保存在 PostGreSQL 数据库中,类型为 bytea。好吧,如果我读出图像,或者一次读出几个,我会得到一个包含许多字节的数组。这是从 PostGreSQL 加载图像并在 React 中显示它们的最有效解决方案吗?因为有几张照片可能会发生你必须等待 4 秒(大约 15 张照片)。
我没有收到错误,这完全与性能有关
我的 Java 代码:
...
while (rs.next()) {
JSONObject obj = new JSONObject();
for (int i = 1; i < intRS + 1; i++) {
String column_name = meta.getColumnName(i);
switch (meta.getColumnType(i)) {
case 2003:
obj.put(column_name, rs.getArray(column_name));
break;
case -5:
obj.put(column_name,
rs.getInt(column_name) == 0 ? JSONObject.NULL : rs.getInt(column_name));
break;
case 16:
obj.put(column_name, rs.getBoolean(column_name));
break;
case 2004:
obj.put(column_name,
rs.getBlob(column_name) == null ? JSONObject.NULL : rs.getBlob(column_name));
break;
case 8:
obj.put(column_name,
rs.getDouble(column_name) == 0 ? JSONObject.NULL : rs.getDouble(column_name));
break;
case 6:
obj.put(column_name,
rs.getFloat(column_name) == 0 ? JSONObject.NULL : rs.getFloat(column_name));
break;
case 4:
obj.put(column_name,
rs.getInt(column_name) == 0 ? JSONObject.NULL : rs.getInt(column_name));
break;
case -9:
obj.put(column_name,
rs.getNString(column_name) == null ? JSONObject.NULL : rs.getNString(column_name));
break;
case 12:
obj.put(column_name,
rs.getString(column_name) == null ? JSONObject.NULL : rs.getString(column_name));
break;
case -6:
obj.put(column_name,
rs.getInt(column_name) == 0 ? JSONObject.NULL : rs.getInt(column_name));
break;
case 5:
obj.put(column_name,
rs.getInt(column_name) == 0 ? JSONObject.NULL : rs.getInt(column_name));
break;
case 91:
obj.put(column_name,
rs.getDate(column_name) == null ? JSONObject.NULL : rs.getDate(column_name));
break;
case 93:
obj.put(column_name, rs.getTimestamp(column_name) == null ? JSONObject.NULL
: rs.getTimestamp(column_name));
break;
default:
obj.put(column_name,
rs.getObject(column_name) == null ? JSONObject.NULL : rs.getObject(column_name));
break;
}
}
ArrayJS.put(obj);
}
我的 React 代码映射到来自我的后端的 JSONArray 格式的图像数组,如下所示:
var img = atob(arrayBufferToBase64(data.Projektbild));
解决方案
对于大型二进制数据,将数据存储在文件系统(或像 S3 这样的对象存储)中并将链接存储在数据库中通常要快得多。
推荐阅读
- next.js - 如何使用 next.js 中的 npm 类名库来选择性地应用 css 文件中的样式?
- python - 创建注册表单时如何使用flask将图像上传到mongodb
- c++ - C ++在文件扩展名之前查找文件名
- php - Json 数组月度数据 php laravel
- python - 如何将'QUIT'命令传递给已经运行的python子进程
- java - 无法上传到 Android Studio 中的 Parse Server
- unix - 如何将两个输入通过管道传输到同一个命令?
- openimageio - OpenImageIO:以显示窗口分辨率而不是数据分辨率打开图像
- python - 缩放pygame屏幕截图
- node.js - 来自另一个 js 文件的函数不执行任何操作