UNPKG

cjd-parkball

Version:

> 中后台业务组件库,中后台就像公园,进入需要买门票(登录),所以以 Parkball(公园球) 命名,公园内必定捕获!作为一个组件库,提供使用方法文档,方便开发者的调用

92 lines (77 loc) 2.3 kB
--- category: 2 title: 用户头像 title_en: Avatar --- zh-CN 点击上传用户头像,并使用 `beforeUpload` 限制用户上传的图片格式和大小。 > `beforeUpload` 的返回值可以是一个 Promise 以支持也支持异步检查:[示例](http://react-component.github.io/upload/examples/beforeUpload.html)。 en-US Click to upload user's avatar, and validate size and format of picture with `beforeUpload`. > The return value of function `beforeUpload` can be a Promise to check asynchronously. [demo](http://react-component.github.io/upload/examples/beforeUpload.html) ````jsx import { Upload, Icon, message } from 'parkball'; function getBase64(img, callback) { const reader = new FileReader(); reader.addEventListener('load', () => callback(reader.result)); reader.readAsDataURL(img); } function beforeUpload(file) { const isJPG = file.type === 'image/jpeg'; if (!isJPG) { message.error('You can only upload JPG file!'); } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { message.error('Image must smaller than 2MB!'); } return isJPG && isLt2M; } class Avatar extends React.Component { state = { loading: false, }; handleChange = (info) => { if (info.file.status === 'uploading') { this.setState({ loading: true }); return; } if (info.file.status === 'done') { // Get this url from response in real world. getBase64(info.file.originFileObj, imageUrl => this.setState({ imageUrl, loading: false, })); } } render() { const uploadButton = ( <div> <Icon type={this.state.loading ? 'loading' : 'plus'} /> <div className="ant-upload-text">Upload</div> </div> ); const imageUrl = this.state.imageUrl; return ( <Upload name="avatar" listType="picture-card" className="avatar-uploader" showUploadList={false} action="//jsonplaceholder.typicode.com/posts/" beforeUpload={beforeUpload} onChange={this.handleChange} > {imageUrl ? <img src={imageUrl} alt="avatar" /> : uploadButton} </Upload> ); } } ReactDOM.render(<Avatar />, mountNode); ```` ````css .avatar-uploader > .ant-upload { width: 128px; height: 128px; } ````