Antd Dragger文件上传

           <Dragger {...draggerContentProps} className={Styles.upload}>
                                <div className={Styles.dragger}>
                                    <span>
                                        <FolderAddOutlined style={{ fontSize: '36px', color: '#4C5362' }} />
                                    </span>
                                    <p className={Styles.text}>单击或拖拽文件到此区域进行上传</p>
                                    <p className={Styles.hint}>文件格式仅限Excel、PDF、Word、zip,文件最大配置为20M</p>
                                </div>
                            </Dragger>

    const draggerAnwserProps = {
        name: 'file',
        multiple: false,
        accept: '.xls,.xlsx,.pdf,.doc,.docx,.zip',
        action: '/api/upload/resources',
        beforeUpload: beforeUpload,
        fileList: anwserFileList,
        maxCount: 1,
        onChange(info) {
            const { status } = info.file;

            if (status !== 'uploading') {
            } else {
                setAnwserFileList(info.fileList);
            }

            if (info.file.status === 'removed') {
                setAnwserFileList(info.fileList);
            }

            if (status === 'done') {
                if (info.file.response.success) {
                    message.success(`${info.file.name} 上传成功`);
                    setAnwserFileList(info.fileList);
                } else {
                    message.error(`${info.file.name} 上传失败`);
                    const tmpFileList = info.fileList.filter(item => item.uid !== info.file.uid);
                    setAnwserFileList(tmpFileList);
                }
            } else if (status === 'error') {
                message.error(`${info.file.name} 上传失败`);
                const tmpFileList = info.fileList.filter(item => item.uid !== info.file.uid);
                setAnwserFileList(tmpFileList);
            }
        },
        onDrop(e) {
        },
    };


    const beforeUpload = file => {
        // 不限制文件大小或者没有设置文件最大值

        const isLtSize = file.size / 1024 / 1024 < 20;
        if (!isLtSize) {
            message.error('文件大于20M,不可上传');
        }
        return isLtSize;
    };

自定义上传

     <Dragger {...draggerProps}>
                        <div className={Styles.dragger}>
                            <p className={Styles.text}>单击或拖拽文件到此区域进行上传</p>
                            <p className={Styles.hint}>支持单个Excel上传</p>
                        </div>
                    </Dragger>

  const draggerProps = {
        name: 'file',
        multiple: true,
        accept: '.xls,.xlsx',
        fileList: fileList,
        customRequest: fileInfo => {
            const tmpFileList = fileList.concat();
            tmpFileList[0] = fileInfo.file;
            setFileList(tmpFileList);
        },
        onRemove: () => {
            setFileList([]);
        },
    };
    const onOk = () => {
        if (!fileList.length) {
            message.warn('请上传excel文件');
            return;
        }
        uploadFile(fileList[0]);
    };
    // 文件上传
    const uploadFile = file => {
        const params = new FormData();
        params.append('file', file);
        const extraOptions = {
            headers: {
                'content-type': 'multipart/form-data',
            },
        };
        axios
            .post('/api/user/batchAddUser', params, extraOptions)
            .then(res => {
                const result = res.data?.result;
                const success = res.data?.success;
                if (success) {
                    message.success('上传成功');
                    onSuccuss();
                    setVisible(false);
                    setFileList([]);
                } else {
                    let msg = res.data?.message || '上传失败';
                    if (_.isArray(result)) {
                        const tmpTip = result.join('、');
                        msg = `第${tmpTip}行,表格格式错误`;
                        message.error(msg);
                    } else {
                        message.error(msg);
                    }
                }
            })
            .catch(err => {
                message.error('上传失败');
            });
    };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用antd Upload Dragger组件的beforeUpload属性和antd的Upload组件的transformFile属性来限制图片的宽高。 具体实现方法如下: 1. 在beforeUpload属性中获取图片信息,包括图片的宽高等信息。 2. 判断图片的宽高是否符合要求,如果符合要求则返回true,否则返回一个错误信息。 3. 在transformFile属性中使用canvas对图片进行压缩,可以指定压缩后的宽高,达到限制图片宽高的效果。 示例代码如下: ```jsx import { Upload, message } from 'antd'; function beforeUpload(file) { // 获取图片信息 const img = new Image(); img.src = window.URL.createObjectURL(file); return new Promise((resolve, reject) => { img.onload = function () { const { width, height } = img; // 判断图片宽高是否符合要求 if (width <= 100 && height <= 100) { resolve(true); } else { message.error('图片宽高不能超过100px'); reject(false); } }; }); } function transformFile(file) { return new Promise((resolve) => { const img = new Image(); img.src = window.URL.createObjectURL(file); img.onload = function () { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = 100; canvas.height = 100; ctx.drawImage(img, 0, 0, 100, 100); canvas.toBlob((blob) => { resolve(new File([blob], file.name, { type: file.type })); }, file.type); }; }); } function App() { return ( <Upload.Dragger beforeUpload={beforeUpload} transformFile={transformFile} > <p className="ant-upload-drag-icon"> <InboxOutlined /> </p> <p className="ant-upload-text">点击或将文件拖拽到这里上传</p> </Upload.Dragger> ); } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值