antd上传文件+类型判断

这篇博客介绍了如何在antd中实现文件上传,并重点讨论了音频类型的校验,包括遇到的问题及解决方案。作者分享了在遇到音频类型错误时,通过增加'audio/mpeg'类型匹配来解决该问题,并提供了常用媒体类型的参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

antd上传文件+类型判断

校验函数

//checkImageWH 必须为正方形  返回一个promise  检测通过返回resolve  失败返回reject阻止图片上传
export function checkImageSameWH(file) {
  return new Promise(function (resolve, reject) {
    let filereader = new FileReader()
    filereader.onload = e => {
      let src = e.target.result
      const image = new Image()
      image.onload = function () {
        if (this.width !== this.height) {
          // debugger
          Modal.error({
            title: '上传文件的宽高必须一致,请重新上传',
          })
          reject()
        } else {
          resolve()
        }
      }
      image.onerror = reject
      image.src = src
    }
    filereader.readAsDataURL(file)
  })
}
//检验文件大小
export function checkSize(file, size) {
  return new Promise(function (resolve, reject) {
    if (file.size / 1024 / 1024 > size) {
      Modal.error({
        title: '文件大小超出限制,请重新上传',
      })
      reject()
    } else {
      resolve()
    }
  })
}
//检验文件类型
export function checkType(file, typeList) {
  return new Promise(function (resolve, reject) {
    if (!typeList.includes(file.type)) {
      Modal.error({
        title: '文件类型错误,请重新上传',
      })
      reject()
    } else {
      resolve()
    }
  })
}

引入使用

//引入
import { checkImageSameWH, checkSize, checkType } from '@/utils/upload'

//使用(上传图片例子,其他基本一样)

 <Form.Item
                className={styles.item}
                name="thumbnail"
                label="缩略图"
                extra="支持拓展名:jpg,png,大小限制50k"
                required
              >
                <Upload
                  action="你的上传地址"
                  listType="picture-card"//类型
                  fileList={thumbnail}//数据
                  data={file => {
                    return { upfile: file }
                  }}
                  accept=".jpg,.png"
                  beforeUpload={(file, fileList) => {
                     /**
                     *这里做校验
                     */
                    return Promise.all([
                      checkType(file, ['image/png', 'image/jpeg']),
                      checkSize(file, 50 / 1024),
                      checkImageSameWH(file),
                    ])
                  }}
                  onChange={({ fileList }) => {
                    fileList = fileList.map(file => {
                      if (file.response) {
                        file.url = file.response.data.url
                      }
                      return file
                    })
                    setThumbnail(fileList)
                  }}
                >
                  {thumbnail.length >= 1 ? null : uploadButton}
                </Upload>
 </Form.Item>
遇到的问题

上传音频时校验类型填这个[‘audio/mp3’]有的类型错误,百度了一下加了个[‘audio/mp3’, ‘audio/mpeg’]就好了

补充

我记录了一些常用的类型,更多参考
http://www.iana.org/assignments/media-types/media-types.xhtml

后缀
*.3gppaudio/3gpp, video/3gpp
*.ac3audio/ac3
*.asfallpication/vnd.ms-asf
*.auaudio/basic
*.csstext/css
*.csvtext/csv
*.docapplication/msword
*.dotapplication/msword
*.dtdapplication/xml-dtd
*.dwgimage/vnd.dwg
*.dxfimage/vnd.dxf
*.gifimage/gif
*.htmtext/html
*.htmltext/html
*.jp2image/jp2
*.jpeimage/jpeg
*.jpegimage/jpeg
*.jpgimage/jpeg
*.jstext/javascript, application/javascript
*.jsonapplication/json
*.mp2audio/mpeg, video/mpeg
*.mp3audio/mpeg
*.mp4audio/mp4, video/mp4
*.mpegvideo/mpeg
*.mpgvideo/mpeg
*.mppapplication/vnd.ms-project
*.oggapplication/ogg, audio/ogg
*.pdfapplication/pdf
*.pngimage/png
*.potapplication/vnd.ms-powerpoint
*.ppsapplication/vnd.ms-powerpoint
*.pptapplication/vnd.ms-powerpoint
*.rtfapplication/rtf, text/rtf
*.svfimage/vnd.svf
*.tifimage/tiff
*.tiffimage/tiff
*.txttext/plain
*.wdbapplication/vnd.ms-works
*.wpsapplication/vnd.ms-works
*.xhtmlapplication/xhtml+xml
*.xlcapplication/vnd.ms-excel
*.xlmapplication/vnd.ms-excel
*.xlsapplication/vnd.ms-excel
*.xltapplication/vnd.ms-excel
*.xlwapplication/vnd.ms-excel
*.xmltext/xml, application/xml
*.zipaplication/zip
*.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值