Задать вопрос
@YungJabo

Какие есть оптимальные способы хранения и передачи изображений из MongoDB?

Я сохраняю изображения товаров в MongoDB через base64. Проблема заключается в том, что при отрисовке этих элементов у клиента, при загрузке они занимают достаточно большое количество времени (особенно, если изображение весит от 1МБ). Есть ли более оптимальные способы хранения и передачи изображений без хранения на сервере изображений?

Сервер Express.js (преобразование в строку для отображения у клиента):
export const collectionDto = (collection) => {
  const { imgData, imgType } = collection.img;
  const img = `data:${imgType};base64,${imgData.toString("base64")}`;
  return {
    name: collection.name,
    img,
    isActive: collection.isActive,
    id: collection._id,
  };
};


Отрисовка изображения элемента на клиенте React.js:
<img
                src={collection.img}
                alt=""
                className="admin__collections__img"
                loading="lazy"
              />


Модель коллекции для MongoDB:
import { Schema, model } from "mongoose";

const CollectionSchema = new Schema({
  name: {
    type: String,
    unique: true,
    required: true,
  },
  img: {
    imgData: {
      type: Buffer,
      required: true,
    },
    imgType: {
      type: String,
      required: true,
    },
  },
  isActive: {
    type: Boolean,
    default: false,
  },
});

export const CollectionModel = model(
  "collection",
  CollectionSchema,
  "collections"
);
  • Вопрос задан
  • 120 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Да, есть: хранить сами изображения не БД, а в отдельном файловом хранилище с внешним доступом по ссылке-идентификатору. В самой же БД хранить только идентификаторы изображений в хранилище. Это стандартная практика работы с файлами и БД.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы