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参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | InferMediaTypeFile | 是 | 文件对象,包含 type 和 name 属性 |
InferMediaTypeFile
| 属性 | 类型 | 说明 |
|---|---|---|
type | string | 文件的 MIME type |
name | string | 文件名 |
返回值
| 类型 | 说明 |
|---|---|
MediaType | 媒体类型:'image'、'video' 或 'file' |
工作原理
MIME type 优先:首先检查文件的
type属性image/*→'image'video/*→'video'
扩展名兜底:当 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
- 图片扩展名:
默认分类:不匹配上述条件的都归类为
'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)
}
}