antd3.X Upload组件上传的文件下载

【问题描述】:使用Upload组件时,默认不显示下载图标不能下载上传的文件。

【要       求】:增加上传文件的下载。

 在组件的props属性中增加showUploadList: { showDownloadIcon: true },这样就显示下载图标了。


官方解释 showUploadList是否展示文件列表, 可设为一个对象,用于单独设定 showPreviewIconshowRemoveIcon 和 showDownloadIcon

还要增加下载处理方法onDownload: this.onDownload

最后对下载处理方法进行实现。

import React, { PureComponent, Fragment } from 'react';
import { Upload, message, Button, Icon } from 'antd';

class UploadFile extends PureComponent {
  constructor(props) {
    super(props);

    this.state = {
      fileList: null,
    };
  }
  componentDidMount() {}

  handleChange = info => {
  };

  beforeUpload = file => {
   
  };
  onDownload = file => {
    let attachId = file&&file.attachId,
    //need-download=1必须添加,不加的话txt pdf等不会下载而是直接打开
    let url =
      localStorage.getItem('severUrl') +
      'XXXX?id=' +
      attachId +
      '&need-download=1';
    //获得id为downLoadListFrame的frame
    var divFrame = window.parent.document.getElementById('downLoadListFrame');
    //判断是否存在,如果存在先移除,再重新创建
    if (divFrame != null) {
      window.parent.document.body.removeChild(divFrame);
    }
    var iframe = document.createElement('iframe');
    iframe.setAttribute('id', 'downLoadListFrame');
    iframe.src = url;
    document.body.appendChild(iframe);
    // 不加下面语句会自动下载2次---不是很理解
    setTimeout(function() {
      iframe.src = '';
    }, 1000);
  };
  render() {
    const props = {
      name: 'file',
      action:'上传文件地址',
      onChange: this.handleChange,
      accept: '文件格式的限制',
      fileList: this.state.fileList,
      beforeUpload: this.beforeUpload,
      data: { 附带的一些参数 },
      onDownload: this.onDownload,
      showUploadList: { showDownloadIcon: true },
    };
    return (
      <Upload {...props}>
        <Button >
          <Icon type="upload" /> 文件上传
        </Button>
      </Upload>
    );
  }
}

export default UploadFile;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 antd 3.x 版本的多表单联动,你可以使用 `Form.create()` 方法结合 `getFieldDecorator` 和 `setFieldsValue` 方法来实现。 首先,你需要定义多个表单字段,并使用 `getFieldDecorator` 方法对每个字段进行包装,以便获取表单的值和进行校验。然后,你可以使用 `setFieldsValue` 方法来动态更新其他表单字段的值。 以下是一个示例代码,演示了如何实现两个表单字段之间的联动: ```jsx import React from 'react'; import { Form, Input } from 'antd'; class MyForm extends React.Component { componentDidMount() { const { form } = this.props; form.setFieldsValue({ // 设置初始值 field1: '', field2: '', }); } handleField1Change = (e) => { const { form } = this.props; const field1Value = e.target.value; // 更新 field2 的值 form.setFieldsValue({ field2: field1Value, }); } render() { const { getFieldDecorator } = this.props.form; return ( <Form> <Form.Item> {getFieldDecorator('field1', { rules: [{ required: true, message: 'Field 1 is required' }], })( <Input placeholder="Field 1" onChange={this.handleField1Change} /> )} </Form.Item> <Form.Item> {getFieldDecorator('field2', { rules: [{ required: true, message: 'Field 2 is required' }], })( <Input placeholder="Field 2" disabled /> )} </Form.Item> </Form> ); } } export default Form.create()(MyForm); ``` 在上面的示例代码中,我们定义了两个表单字段 `field1` 和 `field2`。当 `field1` 的值发生变化时,我们通过调用 `form.setFieldsValue` 方法来更新 `field2` 的值。在 `field2` 的 `getFieldDecorator` 中设置了 `disabled` 属性,以禁用该表单字段的输入。 你可以根据需要进行扩展和修改,实现更复杂的多表单联动效果。希望能帮到你!如果有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值