#java #reactjs #spring
#java #reactjs #spring
Вопрос:
Я сохраняю изображение, которое загружается в серверную часть Spring с помощью React, в базе данных PostgreSQL как тип bytea . Ну, если я считываю изображение или несколько за раз, я получаю массив из многих байтов. Является ли это наиболее эффективным решением для загрузки изображений из PostgreSQL и отображения их в React? Потому что с несколькими изображениями может случиться так, что вам придется ждать 4s (около 15 изображений).
Я не получаю сообщение об ошибке, все дело в производительности
Мой JavaCode:
...
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));
Комментарии:
1. Вы отправляете двоичные данные в формате JSON. Двоичные данные должны отправляться как двоичные, в противном случае ваше байтовое значение
100
занимает 3 байта вместо 1. Не говоря уже о ненужной сериализации и десериализации данных JSON.
Ответ №1:
Для больших двоичных данных обычно намного быстрее хранить данные в файловой системе (или хранилище объектов, например S3) и сохранять ссылку в базе данных.
Комментарии:
1. @ dssjoblom Это невозможно, поскольку приложение работает в облаке
2. Но у вас нет места на диске в вашем облаке?
3. Я использую Pivotal в качестве службы PaaS
4. @schorle88 Я не использовал Pivotal, но см., Например, Здесь: docs.pivotal.io/application-service/2-10/operating /…
5. @dssjoblom Хорошо, я посмотрю, спасибо. Но это лучшее решение? Я имею в виду, что я также хочу обновлять, удалять и т. Д. Изображения.