如何在 Uploadcare Widget 中实现 minDimensions

How to implement minDimensions in Uploadcare Widget

Uploadcare可以添加如下设置:

var myDialog = uploadcare.openDialog(null, {
    imagesOnly: true,
    multiple: true,
    multipleMin: 1
    multipleMax: 7
});

现在 minDimensions 是如何设置的? The documentation 显示 minDimensions(800x600) 但该表示法不起作用。以下尝试无效:

var myDialog = uploadcare.openDialog(null, {
    imagesOnly: true,
    multiple: true,
    multipleMin: 1
    multipleMax: 7,
    minDimensions: '800,600'
});

以下也不起作用:

var myDialog = uploadcare.openDialog(null, {
    imagesOnly: true,
    multiple: true,
    multipleMin: 1
    multipleMax: 7,
    minWidth: 800,
    minHeight: 600
});

此外,不清楚如果上传的图片尺寸小于这些设置会发生什么。小部件是否显示错误?

您需要定义自己的验证器函数并将它们添加到 widget/dialog。 因此,使用您选择的签名和逻辑编写 minDimensions 函数。 该文档具有 imagesOnlymaxDimenstions 验证函数的示例实现。您可以从中获取灵感。

当您的验证函数由于某种原因拒绝文件时,您应该抛出错误,例如throw new Error('dimensions'); 'dimensions' 字符串将用于在您的自定义本地化地图中查找用户友好的消息:

UPLOADCARE_LOCALE_TRANSLATIONS = {
  errors: {
    'dimensions': 'File dimension check failed',
    ...
  },
  ...
}

您可以找到更详细的示例 here

minDimensions 以及 minWidthminHeight 不是小部件选项。 link 指的是文件验证文档。文件验证是一个在文件完全上传之前调用的函数,它可以访问 fileInfo 对象,以便您可以检查文件参数(大小、名称、图像尺寸等)并在某些参数与您的不匹配时中止上传要求。

要设置图像维度验证器,您需要先定义一个验证函数

function minDimensions(width, height) {
  return function(fileInfo) {
    var imageInfo = fileInfo.originalImageInfo;
    if (imageInfo !== null) {
      if (imageInfo.width < width || imageInfo.height < height) {
        throw new Error('dimensions');
      }
    }
  }
}

然后,当您打开对话框时,将验证函数添加到对话框设置中的验证器数组

var myDialog = uploadcare.openDialog(null, {
    imagesOnly: true,
    multiple: true,
    multipleMin: 1,
    multipleMax: 7,
    validators: [minDimensions(800, 600)]
});

如果文件未通过验证,小部件将显示默认错误消息 - "Can't upload",但您可以使用 UPLOADCARE_LOCALE_TRANSLATIONS 选项自定义错误消息

UPLOADCARE_LOCALE_TRANSLATIONS = {
  // messages for widget
  errors: {
    'dimensions': 'The image has to be 800x600px or larger.'
  },
  // messages for dialog’s error page
  dialog: { tabs: { preview: { error: {
    'dimensions': {
      title: 'Error.',
      text: 'The image is too small. Try to upload another one.',
      back: 'Back'
    }
  } } } }
};