FileMapView - 文件预览组件
FileMapView 是一个强大的文件预览组件,支持多种文件类型的展示和预览功能,提供友好的文件列表视图。
功能特性
- 📁 多文件支持: 支持同时展示多个文件
- 🖼️ 图片预览: 支持图片文件的缩略图展示
- 📄 多格式支持: 支持 PDF、Word、PPT、JSON、YAML 等多种文件格式
- 🎨 智能布局: 根据文件数量自动调整展示布局
- 📱 响应式设计: 适配不同屏幕尺寸
- 🧩 自定义点击: 支持业务接管普通文件卡片点击,或禁用内置默认预览点击
- 🪪 无 URL 卡片展示: 无
url/previewUrl但有type和name的文件会按类型展示文件图标和卡片 - ♿ 可访问性: 普通文件卡片带有基于文件名的
aria-label - 🔧 类型安全: 完整的 TypeScript 类型支持
基本用法
无 url/previewUrl 时的文件卡片展示
当附件暂时没有 url / previewUrl,但提供了 type 和 name 时,组件不会把图片或视频渲染为空缩略图,而是降级为普通文件卡片,展示对应文件类型图标和文件名。
自定义文件点击
通过 onFileClick 可以接管普通文件卡片点击;通过 disableDefaultFileClick 可以禁用普通文件卡片内置的默认预览点击,适合在业务侧统一打开抽屉、侧边栏或自定义预览器。
API 参考
Props
AttachmentFile
支持的文件类型
图片格式
- JPEG/JPG
- PNG
- GIF
- WebP
文档格式
- PDF (application/pdf)
- Word (application/msword, .docx)
- PowerPoint (application/vnd.ms-powerpoint, .pptx)
数据格式
- JSON (application/json)
- YAML/YML (application/x-yaml)
- TXT (text/plain)
使用示例
基本示例
限制显示数量
使用 maxDisplayCount 限制非图片文件的显示数量,超出部分会显示"查看所有文件"按钮:
自定义图片预览(onPreview)
传入 onPreview 后,点击图片缩略图不再打开 antd 内置灯箱,而是执行自定义逻辑(如打开自己的图片查看器):
自定义媒体条目渲染(itemRender)
使用 itemRender 可以完全接管每个图片/视频缩略图的渲染,常用于回显场景(如显示自定义蒙层、额外操作按钮等):
自定义预览和下载
接管普通文件点击
onFileClick 只接管普通文件卡片点击,优先级高于 onPreview 和默认 window.open。如果只想禁止卡片点击打开默认预览,可以传 disableDefaultFileClick。
无 URL 媒体文件降级为普通文件卡片
图片和视频只有在存在 url 或 previewUrl 时才会进入缩略图区域。只有 type 和 name 的媒体文件会按普通文件卡片展示,避免出现空图片或空视频缩略图。
自定义更多操作
使用 renderMoreAction 添加自定义的更多操作按钮:
自定义悬浮动作区
使用 customSlot 完全自定义文件项的悬浮动作区:
右侧布局
使用 placement 属性控制文件列表的位置:
自定义样式
使用 style 和 className 自定义组件样式:
完整示例(结合 Bubble 组件)
在 Bubble 组件中使用 FileMapView:
布局特性
FileMapView 会根据文件数量和类型自动调整布局:
- 图片文件: 使用网格布局展示,支持图片预览组
- 视频文件: 有
url或previewUrl时使用视频缩略图展示 - 普通文件: 使用列表布局展示文件图标、文件名和文件信息
- 无 URL 媒体文件: 图片/视频没有
url和previewUrl但有type/name时,降级为普通文件卡片展示 - 混合文件: 图片在上方网格展示,其他文件在下方列表展示
- 溢出控制: 当非图片文件超过
maxDisplayCount时,显示"查看所有文件"按钮
高级用法
文件事件处理
FileMapView 支持多种文件操作事件,可以通过回调函数自定义处理逻辑:
动态文件管理
文件权限控制
根据用户权限显示不同的操作按钮:
文件加载状态
处理文件加载和错误状态:
注意事项
性能优化
- 文件大小: 建议合理控制预览图片的大小,避免影响加载性能
- 懒加载: 对于大量文件,建议使用
maxDisplayCount限制初始显示数量 - 图片优化: 使用
previewUrl提供压缩后的预览图,而不是原图 - 内存管理: 及时清理不再使用的文件 Map,避免内存泄漏
类型安全
- 文件类型: 确保
type字段使用正确的 MIME 类型 - 必填字段: 建议提供
name、type、uuid;如果没有url/previewUrl,组件会按文件卡片降级展示 - 类型检查: 使用 TypeScript 确保类型正确
用户体验
- 预览链接:
previewUrl应该指向可访问的资源地址 - 错误处理: 提供友好的错误提示和降级方案
- 加载状态: 显示文件加载状态,避免用户等待
- 操作反馈: 文件操作后提供明确的反馈信息
安全性
- URL 验证: 验证文件 URL 的合法性,防止 XSS 攻击
- 文件类型: 限制可预览和下载的文件类型
- 权限控制: 根据用户权限控制文件操作
- 跨域处理: 处理跨域文件访问问题
兼容性
- 浏览器支持: 确保在目标浏览器中正常工作
- 移动端适配: 在移动设备上测试文件预览和下载功能
- 文件大小限制: 考虑浏览器和设备的文件大小限制
常见问题
如何自定义文件图标?
FileMapView 会根据文件类型自动显示对应的图标。如果需要自定义,可以通过 CSS 覆盖默认样式。
图片预览不显示怎么办?
- 检查
previewUrl或url是否正确 - 确认图片资源可访问
- 检查是否有跨域问题
- 验证
type字段是否为图片类型 - 如果没有
url/previewUrl,图片会按普通文件卡片展示,这是预期行为
如何限制文件类型?
在传入 fileMap 之前过滤文件:
如何实现文件上传?
FileMapView 是纯展示组件,不包含上传功能。可以配合 Upload 组件使用:
相关组件
更新日志
v1.0.0
- 初始版本发布
- 支持多种文件格式预览
- 支持智能布局
- 支持响应式设计
- 支持自定义普通文件点击与禁用默认点击预览
- 支持无 URL 媒体文件按普通文件卡片降级展示
- 普通文件卡片补充基于文件名的
aria-label
