gpt4 book ai didi

validation - 如何在 Sanity 中验证上传图像的尺寸?

转载 作者:行者123 更新时间:2023-12-02 14:47:00 28 4
gpt4 key购买 nike

我在 Sanity ( docs ) 中有一个 image 类型字段,我需要确保尺寸在特定范围内以避免破坏他们正在访问的网站。 Sanity 提供验证,但图像类型只有“必需”和“自定义”规则,并且传递到自定义验证器的字段信息不包括图像元数据。

我如何解决此限制并提供维度的 CMS 内验证?

最佳答案

虽然 Sanity 不会将图像元数据传递到验证器,但您可以从提供的 Assets ID 中提取图像格式和尺寸信息。根据this documentation ,这是一种无需从 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,
}
}

我还将此功能融入了 sanity-pills使这样做更容易的库:

import { createImageField } from "sanity-pills"

createImageField({
name: "image",
validations: {
required: true,
minWidth: 500,
maxHeight: 9000
},
})

关于validation - 如何在 Sanity 中验证上传图像的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com