尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

upload的典型案例demo

upload的典型案例demo
📅 发布时间:2026/6/20 12:00:04

upload的典型案例demo

import React, { useState } from 'react';
import { Upload, Button, message, List } from 'antd';
import { UploadOutlined } from '@ant-design/icons';

interface CustomFile {
    uid: string;
    name: string;
    status: 'done' | 'error' | 'uploading';
    url?: string;
}

const DemoUpload: React.FC = () => {
    const [fileList, setFileList] = useState<CustomFile[]>([]);

    // 校验文件
    const beforeUpload = (file: File) => {
        const isImage = file.type.startsWith('image/');
        if (!isImage) {
            message.error('只能上传图片文件!');
            return Upload.LIST_IGNORE;
        }
        return true;
    };

    // 自定义上传
    const customRequest = async (options: any) => {
        setFileList(prev => [
            ...prev,
            {
                uid: options.file.uid,
                name: options.file.name,
                status: 'uploading',
            },
        ]);
        // 模拟上传
        setTimeout(() => {
            setFileList(prev =>
                prev.map(file =>
                    file.uid === options.file.uid
                        ? {
                            ...file,
                            status: 'done',
                            url: URL.createObjectURL(options.file),
                        }
                        : file
                )
            );
            message.success(`${options.file.name} 上传成功`);
            options.onSuccess && options.onSuccess('ok');
        }, 1000);
    };

    // 移除文件
    const handleRemove = (file: CustomFile) => {
        setFileList(prev => prev.filter(f => f.uid !== file.uid));
    };

    return (
        <div>
            <Upload
                beforeUpload={beforeUpload}
                customRequest={customRequest}
                showUploadList={false}
                multiple
            >
                <Button icon={<UploadOutlined />}>上传图片</Button>
            </Upload>
            <List
                style={{ marginTop: 16 }}
                bordered
                dataSource={fileList}
                renderItem={item => (
                    <List.Item
                        actions={[
                            <a key="remove" onClick={() => handleRemove(item)}>
                                移除
                            </a>,
                        ]}
                    >
                        <span>
                            {item.name} - {item.status}
                        </span>
                        {item.url && (
                            <img
                                src={item.url}
                                alt={item.name}
                                style={{ width: 40, marginLeft: 8 }}
                            />
                        )}
                    </List.Item>
                )}
            />
        </div>
    );
};

export default DemoUpload;
漫思

相关新闻

  • 简单聊聊数据可视化大屏制作的前端设计与后端开发
  • [THUWC 2018] 字胡串
  • 2025 年钢结构厂家推荐榜:箱型H型/厂房仓库/电厂/桥梁/农牧业/锅炉/场馆/高层框架/装配式钢结构工厂,聚焦安全与品质,助力建筑项目精准选品

最新新闻

  • 2026年大平层装修深度测评:如何为你的改善型住宅匹配最佳方案? - 速递信息
  • ARM Cortex-M4微控制器架构解析:从内核到低功耗设计实战
  • 肇庆黄金回收实测六家靠谱老店盘点 - 余生黄金回收
  • 从高危RCE漏洞到POC分析:实战环境搭建与防御体系构建
  • 2026年6月最新劳力士中国官方售后服务地址与客服电话网点列表 - 劳力士服务中心
  • 合肥中科信息工程学校 2026 秋季招生全解析,附官方正规报名入口 - 辛云教育资讯

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号