首页 > 解决方案 > 如何使用 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));

标签: javareactjsspring

解决方案


对于大型二进制数据,将数据存储在文件系统(或像 S3 这样的对象存储)中并将链接存储在数据库中通常要快得多。


推荐阅读