项目中使用antd中的upload组件file对象到底是info.file还是info.file.originFileObj_坑

简介: 在Ant Design的Upload组件中,`onChange`事件处理函数接收一个对象参数,其中`file`字段在不同情况下可能是一个File对象或包含`originFileObj`属性的对象。为了兼容,可以使用`info.file.originFileObj ? info.file.originFileObj : info.file`来确保获取到原始的File对象。官方建议这种写法,并将在未来的大版本中统一返回包含`originFileObj`属性的对象。

昨天还好好的,今天将文件上传封装成了一个简单的组件,其实也就相对封装了样式,但是今天就不行了,文件传给后端,后端接受不到file对象了。

一般写法:

<div >
    <Input 
      value={
   aclFileName}
      placeholder={
   '请选择文件'} 
      title={
   `ACL文件`} 
      onChange={
   (e) => this.inputName(`aclFileName`, e.target.value)} 
      />
    <Upload
        maxCount={
   1}
        action="#"
        showUploadList={
   false}
        onChange={
   this.chengFileFun}
        beforeUpload={
   this.beforeUpload}
    >
    <Button rsType="noIcon" title="选择文件"></Button>
        <a href="#!" style={
   {
    color: '#ccc', fontSize: '12px', marginTop: '8px', marginLeft: '8px' }}>请上传文件</a>
    </Upload>
</div>

beforeUpload这个函数返回的返回值伟false的时候不自动上传。

    beforeUpload = () => {
   
        return false
    }

onchange事件,上传中、完成、失败都会调用这个函数。

文件状态改变的回调,返回为:

{
file: { /* … / },
fileList: [ /
… / ],
event: { /
… */ },
}

1.file 当前操作的文件对象。

{
   
   uid: 'uid',      // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突
   name: 'xx.png'   // 文件名
   status: 'done', // 状态有:uploading done error removed,被 beforeUpload 拦截的文件没有 status 属性
   response: '{"status": "success"}', // 服务端响应内容
   linkProps: '{"download": "image"}', // 下载链接额外的 HTML 属性
}

2.fileList 当前的文件列表。
3.event 上传中的服务端响应内容,包含了上传进度等信息,高级浏览器支持;

说明onChange函数接收了一个对象作为形参。

    chengFileFun = (info) => {
   
    //因为没有 当前url#所有会触发error
    if (file.file.status === 'error') {
   
        let name = info.file.name
        let nameSplit = name.split('.')
        if (nameSplit[nameSplit.length - 1] === 'txt') {
   
            let fileObj = info.file
            this.setState({
   
                aclFileName: name,
                file:fileObj
            })
        } else {
   
            message.warning("请上传txt文件")
        }
    }
}

但是上午的时候突然发现info.file并不是文件对象,有时候又会是。

    chengFileFun = (info) => {
   
    //因为没有 当前url#所有会触发error
    if (file.file.status === 'error') {
   
        let name = info.file.name
        let nameSplit = name.split('.')
        if (nameSplit[nameSplit.length - 1] === 'txt') {
   
            let fileObj = info.file.originFileObj ? info.file.originFileObj : info.file
            this.setState({
   
                aclFileName: name,
                file:fileObj
            })
        } else {
   
            message.warning("请上传txt文件")
        }
    }
}

info.file.originFileObj ? info.file.originFileObj : info.file 使用三木可以很好的解决问题;

官方解释:
在这里插入图片描述

onChange 为什么有时候返回 File 有时候返回 { originFileObj: File }?

历史原因,在 beforeUpload 返回 false 时,会返回 File 对象。在下个大版本我们会统一返回 { originFileObj: File } 对象。当前版本已经兼容所有场景下 info.file.originFileObj 获取原 File 写法。你可以提前切换。

目录
相关文章
|
缓存 资源调度
解决安装依赖时报错:npm ERR! code ERESOLVE
解决安装依赖时报错:npm ERR! code ERESOLVE
5997 0
解决安装依赖时报错:npm ERR! code ERESOLVE
UniApp 获取当前页面标题(navigationBarTitleText)
UniApp 获取当前页面标题(navigationBarTitleText)
2438 0
|
2月前
|
人工智能
Qoder CN的Credits是什么?59元套餐给多少Credits?
Qoder CN的Credits是调用AI模型的资源计量单位。59元个人专业版每月含2000 Credits,支持更多补全与复杂任务。不同模式消耗不同(如Editor Ask约3-4/次,Quest Agent约50/次),额度按购买日周期重置,不累积。阿里云Qoder CN官网:https://t.aliyun.com/U/hGZKNX
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
668 0
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
|
11月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
61174 11
|
机器学习/深度学习 自然语言处理 分布式计算
大规模语言模型与生成模型:技术原理、架构与应用
本文深入探讨了大规模语言模型(LLMs)和生成模型的技术原理、经典架构及应用。介绍了LLMs的关键特点,如海量数据训练、深层架构和自监督学习,以及常见模型如GPT、BERT和T5。同时,文章详细解析了生成模型的工作原理,包括自回归模型、自编码器和GANs,并讨论了这些模型在自然语言生成、机器翻译、对话系统和数据增强等领域的应用。最后,文章展望了未来的发展趋势,如模型压缩、跨模态生成和多语言多任务学习。
2552 3
|
存储 人工智能 图计算
MiniRAG:迷你 RAG 系统加成小型语言模型,爆发出与大型语言模型相当的性能
MiniRAG 是香港大学推出的新型 RAG 系统,专为资源受限场景设计,支持高效知识检索与推理,适用于多种应用场景。
871 12
MiniRAG:迷你 RAG 系统加成小型语言模型,爆发出与大型语言模型相当的性能
|
存储 JavaScript 开发者
Vue 3 组件通信方式总结
Vue 3 组件通信方式总结
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
787 2
前端JS读取文件内容并展示到页面上
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
17095 2

热门文章

最新文章