Настройка медиа-библиотеки Payload CMS

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка медиа-библиотеки Payload CMS
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Медиатека в Payload CMS

Payload управляет медиафайлами через специальную коллекцию с типом upload. Файлы могут храниться локально или в облаке (S3, Cloudflare R2, GCS) через официальные плагины адаптеров.

Базовая коллекция Media

// collections/Media.ts
import type { CollectionConfig } from 'payload/types'

const Media: CollectionConfig = {
  slug: 'media',
  upload: {
    staticURL: '/media',
    staticDir: 'public/media',     // локальное хранение
    imageSizes: [
      { name: 'thumbnail', width: 400, height: 300, crop: 'center' },
      { name: 'card', width: 768, height: 512, crop: 'center' },
      { name: 'tablet', width: 1024, withoutEnlargement: true },
    ],
    adminThumbnail: 'thumbnail',
    mimeTypes: ['image/*', 'application/pdf'],
    // максимальный размер файла (байты)
    limits: { fileSize: 10 * 1024 * 1024 },
  },
  fields: [
    {
      name: 'alt',
      type: 'text',
      required: true,
    },
    {
      name: 'caption',
      type: 'text',
    },
  ],
}

export default Media

S3-хранилище через плагин

npm install @payloadcms/storage-s3
// payload.config.ts
import { s3Storage } from '@payloadcms/storage-s3'

export default buildConfig({
  plugins: [
    s3Storage({
      collections: {
        media: {
          prefix: 'media',
          generateFileURL: ({ filename, prefix }) =>
            `${process.env.CDN_URL}/${prefix}/${filename}`,
        },
      },
      bucket: process.env.S3_BUCKET!,
      config: {
        region: process.env.S3_REGION || 'eu-west-1',
        credentials: {
          accessKeyId: process.env.S3_ACCESS_KEY!,
          secretAccessKey: process.env.S3_SECRET_KEY!,
        },
        endpoint: process.env.S3_ENDPOINT,  // для Cloudflare R2 или MinIO
      },
    }),
  ],
})

Для Cloudflare R2 endpoint = https://<account-id>.r2.cloudflarestorage.com, region = auto.

Cloudflare R2 + Images Transform

// collections/Media.ts — URL трансформации через Cloudflare Images
upload: {
  imageSizes: [
    {
      name: 'thumbnail',
      generateImageName: ({ height, sizeName, extension, width }) =>
        `${sizeName}_${width}x${height}.${extension}`,
    },
  ],
  // Для R2 — не генерировать серверные ресайзы, использовать CF Image Resizing
  disableLocalStorage: true,
}

Загрузка файлов через API

// Загрузка через REST API
const formData = new FormData()
formData.append('file', fileBlob, 'image.jpg')
formData.append('alt', 'Описание изображения')

const response = await fetch('/api/media', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}` },
  body: formData,
})

const media = await response.json()
// media.url — URL файла
// media.sizes.thumbnail.url — URL ресайза

Использование в других коллекциях

// Поле загрузки в коллекции
{
  name: 'featuredImage',
  type: 'upload',
  relationTo: 'media',
  required: true,
}

// В Next.js компоненте
import Image from 'next/image'

const PostCard = ({ post }: { post: Post }) => {
  const image = post.featuredImage
  if (typeof image === 'string') return null  // не заполнен

  return (
    <Image
      src={image.sizes?.card?.url || image.url!}
      alt={image.alt}
      width={768}
      height={512}
    />
  )
}

Сроки

Настройка медиатеки с S3/R2 хранилищем, ресайзами и интеграцией в коллекции — 0,5–1 день.