antd 踩坑 upload组件 上传成功未显示图片--1

  1. 关于antd官方文档的坑
    首先先说一下antd的官方文档。
    我不知道他们是怎么在管理站点的,文档内容估计很长一段时间没有更新了。这次公司项目中用到这个upload组件卡了我近两天,就是找不到跳出他们规定格式的坑。

  2. onChange事件
    这个事件对于常常自由发挥的程序员来说,可以说是毫无用处(可能是我还没有必须用到它的地方),首先它只是用来改变状态的,文档中他被用来改变上upload组件的loading状态,单页面单组件或许这么用能显得人性化一点。
    而事实上如果你的接口回传格式不符合它的既定格式的话,变成loading之后将无法变回来。

  3. file格式
    文档中file对象包含了{uid,name,status,response: ‘{“status”: “success”}’,linkProps}这些东西,当然这些只是他upload上传文件是会有的属性,可以手动设置filelist来代替他本身的file列表,不过其中uid是必须的,要显示图片,url也是必须的。

下面说说我在项目中遇到的坑

项目中,我用到了upload组件来上传图片,同事写的接口只返回图片的url。因为格式不符合官方的规定,组件loading之后就变不回来了,而且也无法读取response。
百度这个问题后跳出来的全是自定义上传customRequest写的。
文档中甚至建议用户给antd降级。

到了这里我真的很感谢vs code 的追源功能,ctrl点击upload标签之后我看到了它可定义的事件。
在这里插入图片描述
在这里找到了onSuccess事件,成功得读取了response,一个接口给的图片链接。

这个事件在文档中是不存在的。
(没准我这文章上了之后,文档就更新了也说不定)

但它却很重要!

在onSuccess事件中,将url赋值给state,图片显示成功。

当然onChange事件就这么被我给丢了。(没用上)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
antd组件库的Upload组件上传文件后,如果还提示规则验证失败,可能是因为您设置了规则验证函数(rules)但是没有正确地处理上传文件的情况。您可以在规则验证函数中增加对上传文件的判断。例如,在上传图片时,您可以通过判断文件类型和文件大小来进行验证。具体的代码实现可以参考下面的示例: ```jsx <Form.Item name="avatar" label="Avatar" rules={[ { required: true, message: 'Please upload your avatar', }, ({ getFieldValue }) => ({ validator(_, file) { const maxSize = 2 * 1024 * 1024; // 2MB const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJPG) { return Promise.reject('You can only upload JPG/PNG file!'); } else if (file.size > maxSize) { return Promise.reject(`Image must smaller than ${maxSize / 1024 / 1024}MB!`); } else { return Promise.resolve(); } }, }), ]} valuePropName="fileList" getValueFromEvent={normFile} > <Upload name="avatar" action="/upload.do" listType="picture"> <Button icon={<UploadOutlined />}>Click to upload</Button> </Upload> </Form.Item> ``` 在这个示例中,我们设置了一个规则验证函数,它会验证上传的文件是否是JPG或PNG格式,以及文件大小是否小于2MB。如果验证失败,会返回一个Promise.reject(),提示错误信息。如果验证通过,会返回一个Promise.resolve(),表示验证成功。这样,在上传文件后,就会先进行规则验证,如果验证通过,才会提交表单数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值