vue3 上传插件vue-file-agent-next

一、安装插件

pnpm add @boindil/vue-file-agent-next

二、基本使用

javascript 复制代码
/* main.ts */
import VueFileAgentNext from "@boindil/vue-file-agent-next";
import "@boindil/vue-file-agent-next/dist/vue-file-agent-next.css";
const app = createApp(App);
app.use(VueFileAgentNext);
...
xml 复制代码
<template>
  <VueFileAgent :uploadUrl="uploadUrl" v-model="fileRecords"></VueFileAgent>
</template>
...
<script setup>
const fileRecords = ref([]);
const uploadUrl = ref("https://www.mocky.io/v2/5d4fb20b3000005c111099e3");
</script>

三、进阶配置

ini 复制代码
<template>
    <div class="upload-btn">
      <!--
      auto: 自动上传
      linkable: 是否显示链接
      theme: list列表形式,默认卡片
      multiple: 是否可以多选
      deletable: 是否可以删除
      meta: 是否显示文件信息
      accept: 允许上传的文件类型
      maxSize: 允许上传的文件大小
      maxFiles: 允许上传的文件数量
      helpText: 提示文字
      errorText: 错误提示文字
    -->
      <VueFileAgent
        ref="vueFileAgent"
        v-model="fileRecords"
        :theme="'list'"
        :multiple="true"
        :deletable="true"
        :meta="true"
        :accept="'audio/*,video/*,image/*'"
        :maxSize="'2048MB'"
        :maxFiles="4"
        :linkable="true"
        :helpText="'选择音视频文件'"
        :errorText="{
          type: '只允许上传视频和音频文件',
          size: '文件大小不能超过2G',
        }"
        @select="filesSelected($event)"
        @beforedelete="onBeforeDelete($event)"
        @delete="fileDeleted($event)"
      ></VueFileAgent>
    </div>
    <div class="el-upload-btn" @click="uploadFiles()">
      <div style="font-size: 24px; line-height: 0">
        <el-icon><UploadFilled /></el-icon>
      </div>
      <div>点击上传</div>
    </div>
</template>
<script setup>
import { onMounted } from "vue";
const fileRecords = ref([]);
const rawFileRecords = [];
const uploadUrl = ref("https://www.mocky.io/v2/5d4fb20b3000005c111099e3");
const uploadHeaders = ref({ "Content-Type": "form-data" });
const fileRecordsForUpload = ref([]);
const vueFileAgent = ref();
const uploadFiles = () => {
  vueFileAgent.value.upload(
    uploadUrl.value,
    uploadHeaders.value,
    fileRecordsForUpload.value
  );
  fileRecordsForUpload.value = [];
};
const deleteUploadedFile = (fileRecord) => {
  vueFileAgent.value.deleteUpload(
    uploadUrl.value,
    uploadHeaders.value,
    fileRecord
  );
};
const filesSelected = (fileRecordsNewlySelected) => {
  var validFileRecords = fileRecordsNewlySelected.filter(
    (fileRecord) => !fileRecord.error
  );
  fileRecordsForUpload.value =
    fileRecordsForUpload.value.concat(validFileRecords);
};
const onBeforeDelete = (fileRecord) => {
  var i = fileRecordsForUpload.value.indexOf(fileRecord);
  if (i !== -1) {
    fileRecordsForUpload.value.splice(i, 1);
    var k = fileRecords.value.indexOf(fileRecord);
    if (k !== -1) fileRecords.value.splice(k, 1);
  } else {
    if (confirm("您确定要删除文件吗?")) {
      vueFileAgent.value.deleteFileRecord(fileRecord);
    }
  }
};
const fileDeleted = (fileRecord) => {
  var i = fileRecordsForUpload.value.indexOf(fileRecord);
  if (i !== -1) {
    fileRecordsForUpload.value.splice(i, 1);
  } else {
    deleteUploadedFile(fileRecord);
  }
};
</script>
<style lang="less" scoped>
</style>

四、参数配置文档

safrazik.github.io/vue-file-ag...

相关推荐
用户29307509766912 分钟前
流式输出:Vue 3 + DeepSeek API 实战
vue.js
先吃饱再说16 分钟前
流式输出完全指南:让 AI 对话像打字机一样流畅
javascript·vue.js
冬枳17 分钟前
基于OpenSeagragon封装的前端病理切片展示组件
前端·typescript
爱勇宝1 小时前
《道德经》第6章:别把团队的创造力用到枯竭
前端·后端
无双_Joney1 小时前
[四期 - 4] NestJS专栏 - 征召一下大家的意见,非常想知道大家都想看看Nest的哪些方面
前端·后端·nestjs
彭亚川Allen1 小时前
停更的这一年,All In AI、陪媳妇生娃、还考了个研
前端·后端·产品经理
爱分享的程序猿-Clark2 小时前
【前端开发】前端开发者如何使用 Claude Code 快速搭建 React 项目!(小白都能学会的教程)
前端·react.js
_kerneler2 小时前
cgroup :限制cpu原理
java·服务器·前端
yingyima3 小时前
AWK 速查手册:不仅仅是文本处理,更是性能与简洁的抉择
前端
悟空瞎说3 小时前
WebSocket 前端丢包处理实战:原理与完整代码实现
前端