react中使用Ant Design的Upload 组件,使用后端提供的接口上传图片,不使用默认的action 请求

1、上传单张图片

import { UploadOutlined } from "@ant-design/icons";
import { Button, message, Upload } from "antd";
import { uploadImagwe } from "../../api/api";

const Home = () => {
  const props = {
    beforeUpload: () => {
      return false;
    },
    onChange: (info) => {
      const formData = new FormData();
      const fileList = info.fileList;
      fileList.forEach((file) => {
        formData.append("name", file.originFileObj);
      });
      // 调后端接口发送上传的图片
      uploadImagwe(formData).then((res) => {
        if (res.code === 0) {
          message.success("upload successfully.");
        } else {
          message.error("upload failed.");
        }
      });
    },
    multiple: true,
  };
  return (
    <Upload {...props}>
      <Button icon={<UploadOutlined />}>Select File</Button>
    </Upload>
  );
};
export default Home;

2、上传多张图片(可拖拽和点击)

import React from "react";
import { CloudUploadOutlined } from "@ant-design/icons";
import { message, Upload } from "antd";
import { uploadImage } from "../../../api/api";
import styles from "./UploadArea.module.scss";

function UploadArea(props) {
  const { Dragger } = Upload;
  const draggerProps = {
    name: "file",
    multiple: true,
    accept: "image/png, image/jpg, image/jpeg, image/gif",
    beforeUpload: () => {
      return false;
    },
    onChange(info) {
      const fileList = info.fileList;
      const formData = new FormData();
      fileList.forEach((file) => {
        formData.append("name", file.originFileObj);
      });
      // 调后端接口发送上传的图片
      uploadImage(formData).then((res) => {
        if (res.code === 0) {
          message.success("图片上传成功");
        } else {
          message.error(res.message);
        }
      });
    },
  };
  return (
    <div className={styles.uploadContainer}>
      {/* 图片上传 */}
      <Dragger {...draggerProps}>
        <p className="ant-upload-drag-icon">
          <CloudUploadOutlined />
        </p>
        <p className="ant-upload-text">单击或拖动图片到此区域识别</p>
        <p className="ant-upload-hint">支持单次或批量上传</p>
      </Dragger>
    </div>
  );
}

export default UploadArea;

3、使用默认的action示例如下(如上传一张新头像之后替换之前的旧头像):

	  const [avatar, setAvatar] = useState('');  // 头像地址
	  
      <div style={{ fontWeight: 100, height: 50 }}>当前头像:</div>
      <Image src={avatar} width={100} />
      <div style={{ fontWeight: 100, height: 50 }}>上传新头像:</div>
      <Upload
        action="/api/upload"
        listType="picture-card"
        maxCount={1}
        onChange={(e) => {
          if (e.file.status === "done") {
            // 说明上传已经完成
            const url = e.file.response.data;
            setAvatar(url)
          }
        }}
      >
        <PlusOutlined />
      </Upload>

下方是我微信公众号的二维码,关于react及其他相关知识点会在公众号上面更新,可以扫码关注以下,有什么问题也可以通过公众号跟我留言哦
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ant DesignUpload组件可以通过设置`showUploadList`属性为`false`,然后使用自定义的进度条组件来实现上传进度的显示。 以下是一个上传大文件并显示进度条进度的示例代码: ```jsx import { Upload, Button } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; import React, { useState } from 'react'; const UploadProgress = ({ percent }) => ( <div style={{ margin: '10px 0' }}> <div style={{ width: `${percent}%`, height: '5px', backgroundColor: '#1890ff' }}></div> </div> ); const Demo = () => { const [uploading, setUploading] = useState(false); const [progress, setProgress] = useState(0); const handleUpload = ({ file }) => { const formData = new FormData(); formData.append('file', file); setUploading(true); // 模拟上传进度 const timer = setInterval(() => { setProgress((prevProgress) => { if (prevProgress >= 100) { clearInterval(timer); setUploading(false); return 100; } else { return prevProgress + 10; } }); }, 500); // 发送上传请求 // axios.post('/api/upload', formData) // .then(() => { // clearInterval(timer); // setUploading(false); // }) // .catch(() => { // clearInterval(timer); // setUploading(false); // }); }; return ( <Upload name="file" action="/api/upload" showUploadList={false} beforeUpload={() => false} onChange={() => {}} customRequest={handleUpload} > <Button icon={<UploadOutlined />} disabled={uploading}> {uploading ? '上传' : '点击上传'} </Button> {uploading && <UploadProgress percent={progress} />} </Upload> ); }; export default Demo; ``` 这段代码,我们定义了一个`UploadProgress`组件作为自定义的进度条组件,它接受一个`percent`属性用来表示上传进度的百分比。在`handleUpload`函数,我们使用`setInterval`模拟上传进度,并使用`setProgress`函数更新上传进度。当上传进度达到100时,我们清除定时器并将`uploading`状态设置为`false`,表示上传完成。在`Upload`组件,我们将`showUploadList`属性设置为`false`,禁用默认上传列表,然后使用自定义的按钮和进度条组件来替代默认上传按钮和上传进度条。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值