如何在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>
解决方案
需要修改三个地方来实现需求:
更新
accept属性
将accept=".xlsx"改为accept=".xls,.xlsx",系统文件选择器会自动过滤出这两种格式的Excel文件。修复文件名后缀处理逻辑
原代码只处理了.xlsx后缀,现在用正则表达式兼容两种后缀,替换原来的var name = e.name.replace(".xlsx", "");:
const name = e.name.replace(/\.(xls|xlsx)$/i, '');
这个正则会忽略大小写匹配.xls或.xlsx后缀并移除,保留文件名的核心部分。
- 更新提示文本
把提示语改成明确说明支持的格式,让用户清晰知晓:
<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
相关产品推荐
相关产品推荐

