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

如何在Ant Design Upload组件中同时支持.xls与.xlsx格式文件?

问题:Ant Design Dragger组件如何同时支持.xls和.xlsx格式上传

我正在使用Ant Design的Upload组件(Dragger拖拽上传组件),当前代码仅设置accept=".xlsx",希望同时支持.xls和.xlsx两种Excel文件格式。以下是我的现有代码,请问如何配置才能实现同时接受这两种格式的文件?

const { Dragger } = Upload;
<Dragger accept=".xlsx"
    previewFile={false}
    showUploadList={false}
    beforeUpload={(e) => {
    var name = e.name.replace(".xlsx", "");
    if (name.indexOf(',') > -1) {
    name = name.replace(",", "");
    }
    if (name.indexOf(' ') > -1)
     name = name.replace(" ", "");
    if (this.state.IsLargeFile) {
     this.setState({ uploded: true, LargeFileName: name });
     this.form.setFieldsValue({ fileContent: 'a', fileName: name })
     }
     else {
     toBase64(e).then((res) => {
      this.setState({ uploded: true });
      this.form.setFieldsValue({ fileContent: res, fileName: name })
       })
         }
         return false;
          }}
          multiple={false}>
       <p className="ant-upload-drag-icon">
    {this.state.uploded ? <CheckCircleOutlined style={{ color: 'green' }} /> : <InboxOutlined />}
   </p>
 <p className="ant-upload-text">Drop Document to upload or click to browse</p>
   <p className="ant-upload-hint">
   Only Excel file is supported.
      </p>
     </Dragger>

解决方案

需要修改三个地方来实现需求:

  1. 更新accept属性
    将accept=".xlsx"改为accept=".xls,.xlsx",系统文件选择器会自动过滤出这两种格式的Excel文件。

  2. 修复文件名后缀处理逻辑
    原代码只处理了.xlsx后缀,现在用正则表达式兼容两种后缀,替换原来的var name = e.name.replace(".xlsx", "");:

const name = e.name.replace(/\.(xls|xlsx)$/i, '');

这个正则会忽略大小写匹配.xls或.xlsx后缀并移除,保留文件名的核心部分。

  1. 更新提示文本
    把提示语改成明确说明支持的格式,让用户清晰知晓:
<p className="ant-upload-hint">
仅支持.xls和.xlsx格式的Excel文件。
</p>

修改后的完整代码
const { Dragger } = Upload;
<Dragger accept=".xls,.xlsx"
    previewFile={false}
    showUploadList={false}
    beforeUpload={(e) => {
    // 用正则移除xls/xlsx后缀,忽略大小写
    const name = e.name.replace(/\.(xls|xlsx)$/i, '');
    if (name.indexOf(',') > -1) {
        name = name.replace(",", "");
    }
    if (name.indexOf(' ') > -1) {
        name = name.replace(" ", "");
    }
    if (this.state.IsLargeFile) {
        this.setState({ uploded: true, LargeFileName: name });
        this.form.setFieldsValue({ fileContent: 'a', fileName: name })
    } else {
        toBase64(e).then((res) => {
            this.setState({ uploded: true });
            this.form.setFieldsValue({ fileContent: res, fileName: name })
        })
    }
    return false;
    }}
    multiple={false}>
    <p className="ant-upload-drag-icon">
        {this.state.uploded ? <CheckCircleOutlined style={{ color: 'green' }} /> : <InboxOutlined />}
    </p>
    <p className="ant-upload-text">拖拽文件上传或点击浏览</p>
    <p className="ant-upload-hint">
        仅支持.xls和.xlsx格式的Excel文件。
    </p>
</Dragger>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:37:45