AvueAvue
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
  • Article 文章
  • Group 分组容器
  • Title 标题文本
  • CountUp 数字动画
  • Comment 评论
  • Chat 客服聊天
  • Captcha 验证码
  • Contextmenu 右键菜单
  • Clipboard 复制文本
  • DialogForm 弹窗表单
  • Draggable 拖拽
  • Export Excel 导入与导出
  • Flow 流程
  • FilterBuilder 高级筛选
  • FileManager 文件管理
  • QRCode 二维码
  • Iframe 嵌入页面
  • ImagePreview 图片预览
  • Login 登录组件
  • License 授权书
  • Print 打印
  • Screenshot 页面截图
  • Search 标签搜索
  • Sign 电子签名
  • TextEllipsis 超出文本省略
  • Tabs 选项卡
  • Tree 树型
  • Video 摄像头
  • Calendar 日历组合示例

FileManager 文件管理

avue-file-manager 提供前端文件夹与文件管理界面,内置图片、音视频、PDF、文本预览以及下载能力。默认上传会生成浏览器临时地址;生产环境请通过 upload-request 接入自己的上传服务。

基础用法

效果预览可直接操作下方示例
正在加载示例…
<template>
  <avue-file-manager
    v-model="files"
    v-model:folders="folders"
    :height="620"
    accept="image/*,.txt,.json,.pdf"
    :max-size="10"
    @select="handleSelect"
    @change="handleChange"
    @error="handleError"
  />
  <el-alert :title="selected ? '当前文件:' + selected : '根目录有使用说明;切换产品文档查看子目录文件'" :closable="false" />
  <p>当前文件数据:</p>
  <pre>{{ JSON.stringify(files, null, 2) }}</pre>
</template>

<script setup>
import { ref } from 'vue'
import { ElMessage } from 'element-plus'

const selected = ref('');
const folders = ref([
  { id: 'design', name: '设计素材' },
  { id: 'documents', name: '产品文档' },
  { id: 'archive', name: '历史归档', parentId: 'documents' }
])
const files = ref([
  { id: 'readme', name: '使用说明.txt', type: 'text/plain', content: '点击文件查看内容。目录只显示直属文件;上传和编辑仅在此本地示例中保存。' },
  {
    id: 'config',
    name: 'component-config.json',
    type: 'application/json',
    size: 158,
    folderId: 'documents',
    content: JSON.stringify({ preview: true, manager: true }, null, 2)
  },
  {
    id: 'brief',
    name: '项目说明.txt',
    type: 'text/plain',
    size: 96,
    folderId: 'archive',
    content: '双击文件可触发预览事件;单击后可移动、重命名或删除。'
  }
])

function handleSelect(file) {
  selected.value = file.name
}

function handleChange(value) {
  console.log('文件列表更新', value)
}

function handleError(error) {
  ElMessage.error(error.message || '文件操作失败')
}
</script>

<style scoped>
pre {
  max-height: 180px;
  padding: 12px;
  overflow: auto;
  color: #d6e4ff;
  background: #1e293b;
  border-radius: 6px;
}
</style>

文件与文件夹数据

文件至少建议提供 id、name、type、size、folderId,并按预览需求提供 url、downloadUrl 或 content。文件夹使用 id、name、parentId 表示层级关系。

const folders = [{ id: 'documents', name: '产品文档' }]
const files = [
  {
    id: 'guide',
    name: '使用说明.txt',
    type: 'text/plain',
    size: 128,
    folderId: 'documents',
    content: '文本文件内容'
  }
]

对接上传服务

upload-request 接收原生 File 和上下文,返回 URL 字符串或包含 url、status 等字段的对象。组件会在上传期间维护文件状态;失败时触发 error。

const uploadRequest = async (file, { folderId }) => {
  const formData = new FormData()
  formData.append('file', file)
  formData.append('folderId', folderId)
  const { data } = await api.upload(formData)
  return { url: data.url, status: 'success' }
}

Attributes

参数说明类型默认值
modelValue / v-model文件列表array[]
folders / v-model:folders文件夹列表array[]
rootLabel根目录名称string全部文件
height管理区域最小高度number / string560
accept原生文件选择器的类型限制string''
multiple是否允许一次选择多个文件booleantrue
maxSize单文件最大体积,单位 MB;0 不限制number0
showUpload / showPreview / download是否显示上传、预览和下载能力booleantrue
disabled / readonly是否禁用或只读booleanfalse
uploadRequest自定义上传函数function-

Events

事件名说明参数
update:modelValue / change文件列表更新files
update:folders文件夹列表更新扁平 folders 数组
select / preview / download / remove选中、预览、下载或删除文件file
upload选择文件并开始上传rawFile, file
error上传或大小校验失败error, rawFile(原生 File)
error文本或媒体预览失败error, file(组件文件对象,可能为 null)
folder-change当前文件夹切换folderId
folder-create / folder-rename / folder-remove文件夹新增、重命名、删除folder

文件数据字段

字段说明
id稳定且唯一的文件标识;缺失时尝试使用 uid,否则生成本地标识
name文件名;缺失时尝试取 URL 末尾名称
typeMIME 类型,用于识别预览方式;也会参考扩展名
size文件大小,单位为字节
folderId所属目录 ID;省略时归入根目录 __avue_root__
url / downloadUrl预览地址 / 下载地址;只有 content 的文件可预览文本,但没有可下载 URL
content可直接提供的文本内容,不需要再请求 URL
statusuploading / success / error,默认 success
errorMessage上传错误说明

文件夹用 { id, name, parentId } 表示,顶层 parentId 可省略或为空字符串;输入也支持嵌套 children,更新事件始终输出扁平数组。请避免使用保留的根目录 ID __avue_root__。

根目录虽然默认名为“全部文件”,实际只展示根目录直属文件;目录切换和搜索均在当前目录内进行,不会递归检索子目录。重命名和移动文件通过 update:modelValue / change 返回新列表,没有独立的文件重命名或移动事件。文件夹只有不包含文件和子目录时才能删除。

上传与持久化

uploadRequest(rawFile, { folderId, file }) 中的 file 是组件已创建的文件记录。回调可异步返回 URL 字符串,或包含 url / downloadUrl / id / status 等字段的对象;抛出异常后组件记录错误并触发 error。

upload 在文件加入列表、开始上传时触发,不代表服务端上传成功。上传过程中和完成后都可能触发 change。未提供上传函数时使用浏览器临时 URL,组件销毁后会回收;持久化需保存服务端返回的数据,目录和文件的增删改也需在业务层对接接口。

accept 只传给浏览器文件选择器,maxSize 按 MB × 1024 × 1024 检查体积;服务端仍需按自己的业务规则校验文件。

Methods 与 Slots

方法参数说明
selectFiles无打开文件选择器
addFilerawFile: File异步加入并处理一个文件,返回 Promise
selectFolderfolderId切换目录并清除已选文件;根目录为 __avue_root__
selectFilefile选择文件并触发 select
previewFilefile选择文件并触发 preview
downloadSelected无下载当前文件并触发 download
removeSelectedFile无移除当前文件并触发文件更新及 remove
openCreateFolderparentId?打开新建目录窗口,默认当前目录
openRenameFolder / openRemoveFolderfolder打开目录重命名 / 删除确认窗口
openRenameDialog / openMoveDialog无打开当前选中文件的重命名 / 移动窗口

方法通过 ref 调用,传入的文件对象应来自当前文件列表或事件。disabled / readonly 用于限制界面编辑,业务仍应管理自己主动调用的方法。组件没有插槽。

最后更新:
贡献者: smallwei
Prev
FilterBuilder 高级筛选
Next
QRCode 二维码