You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在react-admin的FileInput中实现maxSize自定义验证消息?

在react-admin的FileInput中实现maxSize自定义验证消息

react-admin 内置的验证规则里确实没有maxSize,但可以通过自定义验证函数来实现文件大小限制和自定义提示消息,具体步骤如下:


1. 编写自定义maxSize验证器

创建一个可复用的验证函数,接收文件大小阈值(字节为单位),返回用于校验的逻辑:

const maxSize = (maxSizeInBytes) => (value) => {
  // 无文件或非数组格式时不触发验证
  if (!value || !Array.isArray(value)) return undefined;
  
  // 筛选出超过大小限制的文件
  const oversizedFiles = value.filter(file => file.size > maxSizeInBytes);
  
  if (oversizedFiles.length > 0) {
    // 返回自定义错误消息,这里换算成MB更易读
    const maxSizeMB = (maxSizeInBytes / 1024 / 1024).toFixed(2);
    return `文件大小不能超过${maxSizeMB}MB`;
  }
  
  return undefined; // 验证通过时返回undefined
};

如果需要更精准的提示(比如指出具体哪个文件过大),可以修改验证逻辑:

const maxSize = (maxSizeInBytes) => (value) => {
  if (!value || !Array.isArray(value)) return undefined;
  
  const oversizedFileNames = value
    .filter(file => file.size > maxSizeInBytes)
    .map(file => file.name);
  
  if (oversizedFileNames.length > 0) {
    const maxSizeMB = (maxSizeInBytes / 1024 / 1024).toFixed(2);
    return `以下文件大小超过${maxSizeMB}MB限制:${oversizedFileNames.join(', ')}`;
  }
  
  return undefined;
};

2. 在FileInput中使用自定义验证器

将验证函数传入FileInput的validate属性即可:

import { SimpleForm, FileInput, FileField, required } from 'react-admin';

const PostCreate = () => (
  <SimpleForm>
    <FileInput 
      source="attachments" 
      label="附件"
      // 同时结合required规则和自定义maxSize规则
      validate={[required('请上传至少一个文件'), maxSize(5 * 1024 * 1024)]}
    >
      <FileField source="src" title="title" />
    </FileInput>
  </SimpleForm>
);

示例中5 * 1024 * 1024代表5MB的字节数,可根据需求自行调整阈值。


内容的提问来源于stack exchange,提问作者Iverson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:45:53