Skip to content

antd form的Upload显示上传进度

typescript
  const uploadRequest = async (options: any) => {
    let { file, onProgress, onSuccess } = options;
    const params = new FormData();
    params.append('FileData', file);
    UploadFile(params, {
      onUploadProgress: ({ total, loaded }: { total: number; loaded: number }) => {
        onProgress({ percent: ((loaded / total) * 100).toFixed(2) }, file);
      },
    })
    .then((res) => {
      if (res.ErrorCode === 0) {
        file = {
          ...file,
          ...res.Body,
          uid: file.uid,
          name: res.Body.FileName,
          url: res.Body.FilePath,
        };
        onSuccess(res, file);
      }
    });
  };

  useImperativeHandle(ref, () => {
    return {
      handleOpen(record: any) {
        setVisible(true);
        if (record) {
          setValues(record);
          const row = { ...record, FileName: record.File?.FileName };
          if (record.File?.FilePath) {
            const file = {
              ...record.File,
              uid: record.File.FileName,
              name: record.File.FileName,
              url: record.File.FilePath,
              status: 'done',
            };
            row.file = [file];  // 回显文件列表
          }
          form.setFieldsValue(row);
        }
      },
    };
  });

<Form form={form}>
  <Form.Item
    label="File Upload"
    name="file"
    valuePropName="fileList"
    getValueFromEvent={(e) => {
      if (Array.isArray(e)) {
        return e;
      }
      return e && e.fileList;
    }}
  >
    <Upload.Dragger
      action=""
      maxCount={1}
      progress={{ showInfo: true }}
      customRequest={uploadRequest}
    >
      <p className="ant-upload-drag-icon">
        <InboxOutlined />
      </p>
      <p className="ant-upload-text">Click or drag file to this area to upload</p>
    </Upload.Dragger>
  </Form.Item>
</Form>

更新时间: