Ant Design Upload 组件之阻止文件默认上传

  最近在做一个后台推送的需求,其中有一处功能是,可以从本地选择txt文件上传,这个txt包含每个被推送客户的uid。其实这个txt文件的意义只是对操作者来说比较方便,因为这个txt文件可以在另一个页面通过导出的方式得到,导出后可以直接使用。所以这个txt文件没有必要做到真正的上传,只是执行一个“上传”的伪动作,让我们可以拿到这个txt文件,而不是传给后台。
  首先,这个上传的部分我们放在了Ant Design的form表单里,整个结构是由 Form.Item进行包裹的,上传的逻辑集中在了Upload这个组件里。
<Form.Item label="推送人群" extra="">
    {getFieldDecorator('personTxt', {
        rules: [{ required: true, message: '请选择推送人群文件' }],
        valuePropName: 'fileList',
        getValueFromEvent: this.normFile
    })(
        <Upload
            action="//upload.58cdn.com.cn/json?rand=0.1298"      //必填,上传的地址
            name="personfile"     //自行指定
            listType="file"     //指定上传的是文件
            accept=".txt"       //指定可上传的文件类型
            beforeUpload={this.beforeUpload}>
            <Button>
                <Icon type="upload" /> 选择txt文件
            </Button>
        </Upload>
    )}
</Form.Item>
  下面我们来重点说一下beforeUpload这个参数:
  它可以阻止默认的上传事件,Upload组件中提供了一个上传前的钩子函数beforeUpload,当这个钩子函数返回false的时候,默认上传行为就会被阻止。那么我们可以把代码写成这样:
beforeUpload = file => {
        let reader = new FileReader();
        reader.readAsText(file);         //读取上传文件的内容
        reader.onload = e => {
            let uids = e.target.result.split('\r\n');      //把读取到的txt文件中的uid以换行符进行分割
            return false;                //阻止上传
        };
    };
  如果想要经过处理后继续上传,并不阻止默认上传行为,可以使用customRequest这个参数。
 
 

猜你喜欢

转载自www.cnblogs.com/zzalmo/p/12094763.html