前端使用Antd中Upload组件上传获取图片base64值

使用React实现文件Base64上传处理,
本文介绍了如何在React组件中使用beforeUpload事件处理文件上传,包括使用FileReader读取文件并转化为Base64编码,以支持图片预览和上传功能。

直接上代码:

<Upload className="avatar-uploader" showUploadList={false} accept='image/*' beforeUpload={this.beforeUpload}>
  {base64
  ? <div>
    <img alt="example" style={{ width: '88%' }} src={base64} />
  </div>
  : <div style={{ textAlign: 'center' }}>
    <Icon type={isLoading ? 'loading' : 'plus' } />
    <div className="ant-upload-text">上传</div>
  </div>}
</Upload>

在beforeUpload事件中获取base64

beforeUpload = (file: any) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => {
      const base64Str = reader.result;
      this.setState({ base64: base64Str })
      resolve({ base64: base64Str, name: file.name });
    };
    reader.onerror = (error) => reject(error);
  });
}

在 Ant Design 的 Upload 组件中,自定义上传文件的展示样式主要依赖于 `showUploadList` 和 `itemRender` 属性。通过这些属性可以灵活控制上传列表的显示方式以及每个文件项的渲染方式。 ### 使用 `itemRender` 自定义文件项渲染 `itemRender` 属性允许自定义上传列表中每个文件项的展示方式。它接收一个函数,返回 React 节点。例如,可以使用该属性来自定义文件名、图标、操作按钮等。 ```jsx import { Upload, Button } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; const CustomUpload = () => { const itemRender = (originNode, file, fileList, actions) => { return ( <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}> <span>{file.name}</span> <Button onClick={() => actions.remove(file)}>删除</Button> </div> ); }; return ( <Upload action="https://www.mocky.io/v2/5cc8019d300000980a0b4b11" itemRender={itemRender} showUploadList > <Button icon={<UploadOutlined />}>上传文件</Button> </Upload> ); }; ``` ### 使用 `showUploadList` 控制上传列表的显示 如果希望隐藏默认的上传列表,并通过其他方式展示文件列表,可以将 `showUploadList` 设置为 `false`,然后在页面上自定义展示文件列表 [^2]。 ```jsx import { Upload, Button } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; const CustomUpload = () => { const [fileList, setFileList] = useState([]); const handleChange = (info) => { let newFileList = [...info.fileList]; setFileList(newFileList); }; return ( <div> <Upload action="https://www.mocky.io/v2/5cc8019d300000980a0b4b11" showUploadList={false} onChange={handleChange} > <Button icon={<UploadOutlined />}>上传文件</Button> </Upload> <ul> {fileList.map((file) => ( <li key={file.uid}>{file.name}</li> ))} </ul> </div> ); }; ``` ### 结合 `customRequest` 实现自定义上传逻辑 如果需要进一步控制上传过程,可以使用 `customRequest` 属性。此属性允许完全自定义上传行为,例如使用 `axios` 或 `fetch` 进行文件上传 [^3]。 ```jsx import { Upload, Button } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; const CustomUpload = () => { const customRequest = ({ action, file, onSuccess, onError }) => { const formData = new FormData(); formData.append('file', file); fetch(action, { method: 'POST', body: formData, }) .then((res) => res.json()) .then((result) => { onSuccess(result); }) .catch((error) => { onError(error); }); }; return ( <Upload action="https://www.mocky.io/v2/5cc8019d300000980a0b4b11" customRequest={customRequest} > <Button icon={<UploadOutlined />}>上传文件</Button> </Upload> ); }; ``` 通过上述方法,可以灵活地控制 Ant Design 的 Upload 组件中文件上传的展示样式和上传逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值