Как я могу проверить размеры загруженного изображения в Sanity? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть поле типа image в Sanity ( документы ), и мне нужно убедиться, что размеры находятся в определенном диапазоне, чтобы не нарушать сайт, на котором они работают. Sanity предлагает проверки, но у типа изображения есть только «обязательные» и «настраиваемые» правила, а информация о полях, передаваемая в настраиваемый валидатор, не включает метаданные изображения.

Как обойти это ограничение ипредложить в CMS проверку размеров?

1 Ответ

0 голосов
/ 26 октября 2019

Хотя Sanity не передает метаданные изображения в валидатор, вы можете извлечь формат изображения и информацию о размерах из предоставленного идентификатора ресурса. Согласно этой документации , это поддерживаемый, стабильный способ доступа к этой информации без загрузки объекта изображения из Sanity.

Например, вот первый аргумент, переданный валидатору Rule.custom:

{
  "_type": "image",
  "alt": "Example Image",
  "asset": {
    "_ref": "image-bff149a0b87f5b0e00d9dd364e9ddaa0-700x650-jpg",
    "_type": "reference"
  }
}

Переход к измерениям изображения может быть выполнен следующим образом:

{
  title: "My Image",
  name: "image",
  type: "image",
  options: {
    accept: "image/*",
  },
  validation: Rule => Rule.custom(image => {
    if (!image) return true
    const { dimensions } = decodeAssetId(image.asset._ref)
    return dimensions.width >= 500 || "Image must be wider"
  }
}

const pattern = /^image-([a-f\d]+)-(\d+x\d+)-(\w+)$/

const decodeAssetId = id => {
  const [, assetId, dimensions, format] = pattern.exec(id)
  const [width, height] = dimensions.split("x").map(v => parseInt(v, 10))

  return {
    assetId,
    dimensions: { width, height },
    format,
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...