1. 程式人生 > >AntD imgage Upload action自動上傳&&提交上傳

AntD imgage Upload action自動上傳&&提交上傳

總結: Antd action://------,自動上傳;

         beforeUpload: this.beforeUpload, 阻止自動上傳, 詳見以下程式碼.

 

import React from "react";
import ReactDOM from "react-dom";
import reqwest from 'reqwest';
import "antd/dist/antd.css";
import "./index.css";
import { Upload, Icon, Modal, Button, uploading,message } from "antd";

class PicturesWall extends React.Component {
  state = {
    previewVisible: false,
    previewView: true,
    previewImage: "",
    fileList: []
  };

  handleUpload = () => {
    const { fileList } = this.state;
    const formData = new FormData();
    fileList.forEach((file) => {
      formData.append('files[]', file);
      console.log(file);

    });

    this.setState({
      uploading: true,
    });

    // You can use any AJAX library you like
    reqwest({
       // 上傳介面
      // url: 'http://localhost:8080/coach_manage/manage_loopPicture_uploadfile',	
      url: '//jsonplaceholder.typicode.com/posts/', 

      method: 'post',
      processData: false,
      data: formData,
      success: () => {
        this.setState({
          fileList: [],
          uploading: false,
        });
        message.success('upload successfully.');
      },
      error: () => {
        this.setState({
          uploading: false,
        });
        message.error('upload failed.');
      },
    });
  } 

  handleCancel = () => this.setState({ previewVisible: false });

  handlePreview = file => {
    this.setState({
      previewImage: file.url || file.thumbUrl,
      previewVisible: true
    });
  };

  handleChange = ({ fileList }) => this.setState({ fileList });

  render() {
    const { previewVisible,previewView, previewImage, fileList } = this.state;
    const props = {
      // action: '//jsonplaceholder.typicode.com/posts/', //自動上傳 antd地址

      // action: 'http://localhost:8080/coach_manage/manage_loopPicture_uploadfile',
      // action: '',
      onRemove: (file) => {
        this.setState(({ fileList }) => {
          const index = fileList.indexOf(file);
          const newFileList = fileList.slice();
          newFileList.splice(index, 1);
          return {
            fileList: newFileList,
          };
        });
      },
      // beforeUpload: (file) => {
      //   this.setState(({ fileList }) => ({
      //     fileList: [...fileList, file],
      //   }));
      //   return false;
      // },
      fileList: this.state.fileList,
      beforeUpload: this.beforeUpload,
      listType:"picture-card",
      // fileList: fileList ,
      onPreview: this.handlePreview ,
      onChange: this.handleChange ,

    }
    const uploadButton = (
      <div>
        <Icon type="plus" />
        <div className="ant-upload-text">Upload</div>
      </div>
    );
    return (
      <div className="clearfix">
        <Modal
          title="新增圖片"
          visible={previewView}
          // footer={null}
          // onOk={this.handleOk}
          onCancel={this.handleCancelModal}
          footer={[
            <Button key="back" size="large" onClick={this.handleCancel}>
              Return
            </Button>,
            <Button
              key="submit"
              type="primary"
              size="large"
              // loading={loading}
              // onClick={this.handleOk}
              onClick={this.handleUpload}
              disabled={this.state.fileList.length === 0}
              loading={uploading}
            >
              Submit
            </Button>
          ]}
        >
          <Upload{...props}           
          >
            {fileList.length >= 1 ? null : uploadButton}
          </Upload>
          <Modal
            visible={previewVisible}
            footer={null}
            onCancel={this.handleCancel}
          >
            <img alt="example" style={{ width: "100%" }} src={previewImage} />
          </Modal>
        </Modal>
      </div>
    );
  }
}

ReactDOM.render(<PicturesWall />, document.getElementById("container"));