Skip to content

inferMediaType

从文件对象推断媒体类型

媒体类型:image
isImageFile: 是
isVideoFile: 否
快速示例:

函数签名

typescript
type MediaType = 'image' | 'video' | 'file'

interface InferMediaTypeFile {
  type: string
  name: string
}

function inferMediaType(file: InferMediaTypeFile): MediaType
function isImageFile(file: InferMediaTypeFile): boolean
function isVideoFile(file: InferMediaTypeFile): boolean

参数

参数名类型必填说明
fileInferMediaTypeFile文件对象,包含 type 和 name 属性

InferMediaTypeFile

属性类型说明
typestring文件的 MIME type
namestring文件名

返回值

类型说明
MediaType媒体类型:'image''video''file'

工作原理

  1. MIME type 优先:首先检查文件的 type 属性

    • image/*'image'
    • video/*'video'
  2. 扩展名兜底:当 MIME type 不明确时,通过文件名扩展名判断

    • 图片扩展名:png, jpg, jpeg, gif, webp, bmp, svg, heic, heif, tiff, ico, avif
    • 视频扩展名:mp4, mov, m4v, webm, mkv, avi, flv, wmv, mpg, mpeg, 3gp, ts, m3u8
  3. 默认分类:不匹配上述条件的都归类为 'file'

使用示例

typescript
import { inferMediaType, isImageFile, isVideoFile } from 'zcw-shared/functions/file/inferMediaType'

// 图片文件(通过 MIME type)
inferMediaType({ type: 'image/png', name: 'photo.png' })
// 'image'

// 视频文件(通过 MIME type)
inferMediaType({ type: 'video/mp4', name: 'movie.mp4' })
// 'video'

// 通过扩展名判断(当 MIME type 不准确时)
inferMediaType({ type: 'application/octet-stream', name: 'image.jpg' })
// 'image'

// 普通文件
inferMediaType({ type: 'application/pdf', name: 'doc.pdf' })
// 'file'

// 便捷判断函数
isImageFile({ type: 'image/jpeg', name: 'photo.jpg' })  // true
isVideoFile({ type: 'video/webm', name: 'clip.webm' })  // true

在聊天/IM 场景中的应用

此函数特别适用于即时通讯应用中的附件类型判断:

typescript
import { inferMediaType } from 'zcw-shared/functions/file/inferMediaType'

function handleAttachment(file: File) {
  const mediaType = inferMediaType(file)
  
  switch (mediaType) {
    case 'image':
      return renderImageBubble(file)
    case 'video':
      return renderVideoBubble(file)
    case 'file':
      return renderFileBubble(file)
  }
}