【工具】vue 文件上传(单个/多个),拖拽上传

vue-simple-uploader实现多文件/文件夹以及可拖拽上传 阅读详情

本文单传组件取自若依微服务为版ruoyi-ui:介绍 | RuoYi

环境:

  • vue@2.6.12 
  • element-ui@2.15.3

 1.文件上传(单个)

 组件代码:

//components/FileUpload

<template>
  <div class="upload-file">
    <el-upload
      :accept="accept"
      :action="uploadFileUrl"
      :before-upload="handleBeforeUpload"
      :file-list="fileList"
      :limit="1"
      :on-error="handleUploadError"
      :on-exceed="handleExceed"
      :on-success="handleUploadSuccess"
      :show-file-list="false"
      :headers="headers"
      class="upload-file-uploader"
      ref="upload"
    >
      <!-- 上传按钮 -->
      <el-button size="mini" type="primary">选取文件</el-button>
      <!-- 上传提示 -->
      <div class="el-upload__tip" slot="tip" v-if="showTip">
        请上传
        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
        的文件
      </div>
    </el-upload>

    <!-- 文件列表 -->
    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
      <li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in list">
        <el-link :href="file.url" :underline="false" target="_blank">
          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
        </el-link>
        <div class="ele-upload-list__item-content-action">
          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
        </div>
      </li>
    </transition-group>
  </div>
</template>

<script>
/**
 * 文件单传
 */
import { getToken } from "@/utils/auth";
export default {
  props: {
    // 值
    value: [String, Object, Array],
    // 接收文件类型·
    accept:{
      type: String,
      default: ''
    },
    // 大小限制(MB)
    fileSize: {
      type: Number,
      default: 5,
    },
    // 文件类型, 例如['png', 'jpg', 'jpeg']
    fileType: {
      type: Array,
      default: () => ["doc", "xls", "ppt", "txt", "pdf"],
    },
    // 是否显示提示
    isShowTip: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      fileList: [],
    };
  },
  computed: {
    // 是否显示提示
    showTip() {
      return this.isShowTip && (this.fileType || this.fileSize);
    },
    // 列表
    list() {
      let temp = 1;
      if (this.value) {
        // 首先将值转为数组
        const list = Array.isArray(this.value) ? this.value : [this.value];
        // 然后将数组转为对象数组
        return list.map((item) => {
          if (typeof item === "string") {
            item = { name: item, url: item };
          }
          item.uid = item.uid || new Date().getTime() + temp++;
          return item;
        });
      } else {
        this.fileList = [];
        return [];
      }
    },
  },
  methods: {
    // 上传前校检格式和大小
    handleBeforeUpload(file) {
      // 校检文件类型
      if (this.fileType) {
        let fileExtension = "";
        if (file.name.lastIndexOf(".") > -1) {
          fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
        }
        const isTypeOk = this.fileType.some((type) => {
          if (file.type.indexOf(type) > -1) return true;
          if (fileExtension && fileExtension.indexOf(type) > -1) return true;
          return false;
        });
        if (!isTypeOk) {
          this.$message.error(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
          return false;
        }
      }
      // 校检文件大小
      if (this.fileSize) {
        const isLt = file.size / 1024 / 1024 < this.fileSize;
        if (!isLt) {
          this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
          return false;
        }
      }
      return true;
    },
    // 文件个数超出
    handleExceed() {
      this.$message.error(`只允许上传单个文件`);
    },
    // 上传失败
    handleUploadError(err) {
      this.$message.error("上传失败, 请重试");
    },
    // 上传成功回调
    handleUploadSuccess(res, file) {
      this.$message.success("上传成功");
      this.$emit("input", res.data.url);
    },
    // 删除文件
    handleDelete(index) {
      this.fileList.splice(index, 1);
      this.$emit("input", '');
    },
    // 获取文件名称
    getFileName(name) {
      if (name.lastIndexOf("/") > -1) {
        return name.slice(name.lastIndexOf("/") + 1).toLowerCase();
      } else {
        return "";
      }
    }
  },
  created() {
    this.fileList = this.list;
  },
};
</script>

<style scoped lang="scss">
.upload-file-uploader {
  margin-bottom: 5px;
}
.upload-file-list .el-upload-list__item {
  border: 1px solid #e4e7ed;
  line-height: 2;
  margin-bottom: 10px;
  position: relative;
}
.upload-file-list .ele-upload-list__item-content {
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: inherit;
}
.ele-upload-list__item-content-action .el-link {
  margin-right: 10px;
}
</style>

 使用:

import FileUpload from '@/components/FileUpload';

export default {
  components: {
    FileUpload,
  }
}

<template>
  <FilesUpload 
      v-model="form.fileUrl"  
      accept=".pdf"
      :fileType="['pdf']"
   />
</template>

结果呈现:无

2.文件上传(多个)

该组件基于若依微服务版ruoyi-ui进行改造  

组件代码:

//components/FilesUpload
<template>
  <div class="upload-file">
    <el-upload
      multiple
      :accept="accept"
      :action="uploadFileUrl"
      :before-upload="handleBeforeUpload"
      :file-list="fileList"
      :on-error="handleUploadError"
      :on-success="handleUploadSuccess"
      :show-file-list="false"
      :headers="headers"
      class="upload-file-uploader"
      ref="upload"
    >
      <!-- 上传按钮 -->
      <el-button size="mini" type="primary">选取文件</el-button>
      <!-- 上传提示 -->
      <div class="el-upload__tip" slot="tip" v-if="showTip">
        请上传
        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
        的文件
      </div>
    </el-upload>

    <!-- 文件列表 -->
    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
      <li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in list">
        <el-link :href="file.url" :underline="false" target="_blank">
          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
        </el-link>
        <div class="ele-upload-list__item-content-action">
          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
        </div>
      </li>
    </transition-group>
  </div>
</template>

<script>
/**
 * 文件多传
 */
import { getToken } from "@/utils/auth";
export default {
  props: {
    // 值
    value: {
      type: Array,
      default(){
        return []
      }
    },
    // 接收文件类型·
    accept:{
      type: String,
      default: ''
    },
    // 大小限制(MB)
    fileSize: {
      type: Number,
      default: 5,
    },
    // 文件类型, 例如['png', 'jpg', 'jpeg']
    fileType: {
      type: Array,
      default: () => ["doc", "xls", "ppt", "txt", "pdf"],
    },
    // 是否显示提示
    isShowTip: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      fileList: [],
    };
  },
  computed: {
    // 是否显示提示
    showTip() {
      return this.isShowTip && (this.fileType || this.fileSize);
    },
    // 列表
    list() {
      let temp = 1;
      if (this.value) {
        // 首先将值转为数组
        const list = Array.isArray(this.value) ? this.value : [this.value];
        // 然后将数组转为对象数组
        return list.map((item) => {
          if (typeof item === "string") {
            item = { name: item, url: item };
          }
          item.uid = item.uid || new Date().getTime() + temp++;
          return item;
        });
      } else {
        this.fileList = [];
        return [];
      }
    },
    valueList(){
      return this.value;
    }
  },
  methods: {
    // 上传前校检格式和大小
    handleBeforeUpload(file) {
      // 校检文件类型
      if (this.fileType) {
        let fileExtension = "";
        if (file.name.lastIndexOf(".") > -1) {
          fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
        }
        const isTypeOk = this.fileType.some((type) => {
          if (file.type.indexOf(type) > -1) return true;
          if (fileExtension && fileExtension.indexOf(type) > -1) return true;
          return false;
        });
        if (!isTypeOk) {
          this.$message.error(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
          return false;
        }
      }
      // 校检文件大小
      if (this.fileSize) {
        const isLt = file.size / 1024 / 1024 < this.fileSize;
        if (!isLt) {
          this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
          return false;
        }
      }
      return true;
    },
    // 上传失败
    handleUploadError(err) {
      this.$message.error("上传失败, 请重试");
    },
    // 上传成功回调
    handleUploadSuccess(res, file) {
      this.$message.success("上传成功");
      this.valueList.push(res.data.url);
      this.$emit("input",this.valueList);
    },
    // 删除文件
    handleDelete(index) {
      this.fileList.splice(index, 1);
      this.valueList.splice(index,1);

      this.$emit("input", this.valueList);
    },
    // 获取文件名称
    getFileName(name) {
      if (name.lastIndexOf("/") > -1) {
        return name.slice(name.lastIndexOf("/") + 1).toLowerCase();
      } else {
        return "";
      }
    }
  },
  created() {
    this.fileList = this.list;
  },
};
</script>

<style scoped lang="scss">
.upload-file-uploader {
  margin-bottom: 5px;
}
.upload-file-list .el-upload-list__item {
  border: 1px solid #e4e7ed;
  line-height: 2;
  margin-bottom: 10px;
  position: relative;
}
.upload-file-list .ele-upload-list__item-content {
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: inherit;
}
.ele-upload-list__item-content-action .el-link {
  margin-right: 10px;
}
</style>

使用:

import FilesUpload from '@/components/FilesUpload';

export default {
   components: {
    FilesUpload,
  }
}

<template>
   <FilesUpload 
      v-model="form.files"  
      accept=".pdf"
      :fileType="['pdf']"
   />
</template>

 结果呈现:

3.拖拽上传

组件代码:

//components/DragUpload

<template>
   <el-row>
       <el-upload
        accept=".ipa,.apk"
        :action="uploadImgUrl"
        :headers="headers"
        :on-remove="removeImage"  
        :on-success="handleUploadSuccess"
        :before-upload="handleBeforeUpload"
        :on-error="handleUploadError"
        drag
        >
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
            <div class="el-upload__tip" slot="tip" v-if="showTip">
                只能上传<b style="color: #f56c6c">{{ fileType.join("/") }}</b>文件,
                且不超过<b style="color: #f56c6c">{{ fileSize }}MB</b>
            </div>
        </el-upload>
   </el-row>
</template>

<script>
// 上传应用
import { getToken } from "@/utils/auth";
export default {
    data() {
    return {
      uploadImgUrl: process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      fileType: ["ipa", "apk"]
    };
  },
  props: {
    value: {
      type: String,
      default: "",
    },
    // 大小限制(MB)
    fileSize: {
      type: Number,
      default: 600,
    },
    // 是否显示提示
    isShowTip: {
      type: Boolean,
      default: true,
    },
  },
  computed:{
    // 是否显示提示
    showTip() {
      return this.isShowTip && (this.fileType || this.fileSize);
    }
  },
  methods:{
      removeImage() {
      this.$emit("input", "");
    },
    handleUploadSuccess(res) {
      this.$emit("input", res.data.url);
      this.loading.close();
    },
    handleBeforeUpload() {
      this.loading = this.$loading({
        lock: true,
        text: "上传中",
        background: "rgba(0, 0, 0, 0.7)",
      });
    },
    handleUploadError() {
      this.$message({
        type: "error",
        message: "上传失败",
      });
      this.loading.close();
    },
  }
}
</script>

 使用:

import DragUpload from "@/components/DragUpload";

export default {
  components: {
    DragUpload,
  }
}

<template>
  <DragUpload v-model="appurl" />
</template>

结果呈现:

优化上传体验:使用Vue和Element UI实现多文件分开上传与进度条显示的完美指南 在本文中,我们将教您如何利用Vue.js和Element UI的强大功能,实现多文件分开上传,并为每个文件添加进度条显示。通过简单的步骤,我们将引导您设置上传参数,处理文件分割逻辑,以及实时更新进度信息。 阅读详情

相关推荐

原生上传文件写法(上传格式为.xls或者.xlsx的大小不超过500M的文件)

原生上传文件写法(上传格式为.xls或者.xlsx的大小不超过500M的文件) 首先写一个input框,type为file,这样一个上传文件的框就出来了,然后配置input框中的属性。比较重要的是accept,这个属性可以限制要上传文件的格式,可以多选,accept:后面跟什么值,就代表能上传什么格式的文件,如果没有写accept属性,则代表所有格式都可以上传。然后有一个@change的方法,这个方法可以用来获取选中的文件 <input type='file' accept='.xls,.xlsx'

weixin_55879414的博客 1808

el-upload上传时的file-List的基本用法

关于el的file-List用法官网有写,但是一直搞不懂的时url到底是什么地址,跟上传地址有什么区别。 于是百度下,有人这么写,意思是url就是文件的地址。难道官网的url就是网上图片的地址?有人问了,那要是本地地址呢,这个url怎传? html: <el-upload action="https://192.168.1.1:8888/xxx上传接口" :file-list="fileList" <i class="el-icon-plus"></i> </

m0_54849873的博客 3907

vue拖拽上传文件实践

最近有一个上传文件的需求,后来琢磨了半天,上网查找资料,最后终于做出来了。 组件编写 首先,写一个简单的拖拽页面。 <div class="upload"> 拖拽上传 </div> 给一点样式 .upload { margin: 100px auto; width: 400px; height: 400px; border: 2px dashed ...

Guan'Blog 3135

el-upload文件上传改造

【代码】el-upload文件上传改造。

bingmoujs的博客 394

upload组件封装,支持拖拽文件上传

组件化思想:组件应该是独立的、可复用的部件,应该遵循单一职责原则,将组件的功能划分得尽可能细致。 API 设计:组件的 API 设计要合理,要考虑到组件的可定制性和易用性。应该尽可能的提供必要的配置项和事件回调,同时避免提供过多的 API,导致 API 过于复杂。 生命周期:组件的生命周期要合理地使用,尤其是对于需要与外部交互的组件,要注意生命周期的时机,以便在组件的不同阶段进行相应的操作。 组件通信:组件通信是组件化开发中的一个重要问题,Vue 中提供了多种通信方式,包括props、emit、emit、e

芳草萋萋鹦鹉洲哦 1262

Vue文件上传功能实现:点击与拖拽上传

在当今Web应用中,文件上传功能是不可或缺的一部分,它使得用户能够上传个人资料图片、文件共享以及数据备份等,极大地丰富了用户交互体验。Vue.js作为一款流行的前端框架,其组件化的开发方式极大地简化了文件上传功能的实现过程。本章将探讨文件上传的技术要求、用户体验考量,并分析Vue.js如何通过其数据绑定和组件系统简化开发。文件上传功能允许用户将本地文件发送到服务器,这在Web应用中扮演着关键角色。从社交网络上的图片分享到在线文档编辑器的文件同步,文件上传增强了用户与应用程序之间的互动性。

weixin_42400643的博客 1571

前端实现文件上传(点击+拖拽)

通过原生的html+js来实现文件的点击上传和拖拽上传。 首先是点击上传文件,只需要借助`input`标签即可,但为了美观,所以过一个div,模拟成上传按钮,然后监听点击事件,通过`元素.click()`去模拟点击真正的上传元素。 然后是拖拽获取上传文件,通过HTML5新增的`drag`API+`dataTransfer`来实现文件的拖拽获取,但在某些低版本IE浏览器不兼容。 最后当我们获取到上传文件之后,我们就可以借助`formDate`对象以及ajax工具(原生、axios等)进行上传了。

weixin_45092437的博客 1万+

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

况老师话竞赛&blog 2206

Vue3 + Nodejs 实战 ,文件上传项目--实现拖拽上传

拖拽上传的本质就是用户与页面的交互,其实涉及到的难点不多,只要懂得了设置div或者某个容器为拖拽对象,这种拖拽上传的问题就迎刃而解了,如有不理解或更好的方案可以私信或评论交流。下一篇准备实现大文件的分片上传,欢迎关注。

m0_64642443的博客 1713

PX4实战指南:通过遥控器通道映射实现多舵机PWM精准控制

本文详细介绍了通过PX4飞控的AUX PWM接口实现遥控器通道映射控制多舵机的实战指南。内容包括硬件选型与连接、软件参数配置、通道映射方法以及常见问题排查,帮助开发者精准实现无人机舵机PWM控制,适用于云台、机械臂等扩展功能开发。

ee345的博客 304

TI CC2642R蓝牙5.2模块实战:从零搭建智能门锁原型(附电路图)

本文详细介绍了如何基于TI CC2642R蓝牙5.2模块从零搭建智能门锁原型,涵盖硬件选型、低功耗配置、蓝牙安全交互等关键环节。通过CC2642R的高性能MCU和蓝牙5.2技术,开发者可实现低功耗、高安全性的智能门锁设计,并提供实用的电路图和PCB布局建议。

o5p6q的博客 110

3分钟上手vue2-manage文件上传:从拖拽到预览的全流程实现

vue2-manage是一个基于Vue + Element UI构建的后台管理系统,提供了完整的文件上传功能模块,支持拖拽上传、图片预览、格式验证等核心功能。本文将带你快速掌握如何在vue2-manage项目中实现从文件选择到预览的全流程操作。 ## 快速了解vue2-manage的文件上传组件 vue2-manage采用Element UI的el-upload组件作为基础,在多个业务场景中实

gitblog_00531的博客 846

揭秘大型语言模型:从神经元到思维透明的奇妙旅程

这篇博客带你走进大型语言模型的内部世界,从神经元的小任务,到功能向量的团队合作,再到层间的协作和思维的透明化。掌握这些知识,能让你在开发中更高效地优化AI,在研究中更深入地探索模型的奥秘。建议多动手实践,把这些理论变成自己的能力!

数据与算法架构提升之路专栏 1521

Vue实现文件上传和oss上传(带进度条和取消上传功能)和拖拽后点击按钮上传(加loading效果)

Vue实现文件上传(带进度条和取消上传功能) 代码实现 这里我只写了单一文件上传的demo,并且只限制了文件大小不能超过5M。如果想限制上传的文件类型,可自行在input标签中进行设置,如果想要实现多个文件一起上传,先要设置input标签属性multiple=“multiple”,然后利用循环将每一个文件数据存入到formData中,最后作为参数传给服务端进行处理。 因为个人习惯原因,我先对axios进行了封装,创建service.js文件,代码如下: import axios from "axios";

牛先森家的博客 4635

Dify 第 14 篇 Dify 知识库改造案例,如何返回完整文档?

在使用Dify社区版v1.7.1的知识库功能时,遇到检索仅返回匹配的文本片段而非完整文档的问题。针对运维案例知识库的需求,尝试了三种解决方案: 调整Chunk大小:通过设置最大分段长度为4000字符,但无法满足超过该长度的文档需求。 增加返回Chunk数量:通过调整Top K参数,但最大仅支持10个片段,且可能包含无关内容。 调用知识库API:通过检索接口获取匹配文档ID,再查询该文档所有分段内容,从而获得完整信息。具体步骤包括生成API密钥、获取知识库ID,并通过HTTP请求实现。 最终推荐采用AP

甘蓝的专栏 1969

“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附优秀论文)

摘 要:本文通过机器学习算法和数据挖掘技术,建立了汽油辛烷值(RON)损失的预测模型,在保证汽油产品脱硫效果的前提下,以降低汽油辛烷值损失在30%以上为目标,给出每个样本的优化操作条件。针对第一问,对285号和313号原始数据用给定的数据处理规范进行预处理,对每一列变量求期望,得到最终的数据补充到相应的样本编号。针对第二问,首先对数据样本按照最大最小限幅以及拉依达法则进行列变量清洗,通过两轮特征筛选确定变量:结合处理后的数据,针对产品中硫含量、RON损失值用。

getusushu的博客 1251

强大的文件上传 Vue 组件

layout category tagline tags post js vue-simple-uploader simple-uploader.js vue {% include JB/setup %} 在日常开发中经常会遇到文件上传的需求,自带 UI,可覆盖、自定义;先来张动图看看效果: 其主要...

awyfungf的博客 1万+

8、Windows 部署ollama

一个本地运行大模型的集成框架,目前主要针对主流的LLaMA架构的开源大模型设计,通过将模型权重、配置文件和必要数据封装进由Modelfile定义的包中,从而实现大模型的下载、启动和本地运行的自动化部署及推理流程。此外,Ollama内置了一系列针对大模型运行和推理的优化策略,目前作为一个非常热门的大模型托管平台,已被包括LangChain、Taskweaver等在内的多个热门项目高度集成。

Andy_shenzl的博客 1131

简化文件上传流程:学习如何封装Vue2拖拽上传组件

🖼文件拖拽上传功能现在已经随处可见,大家应该都用过了吧,那么它具体是怎么实现的大家有去了解过吗?今天我们一起来实现一下这个功能,并封装一个拖拽上传组件吧。

Twinkle_sone的博客 1458

set_input_delay/set_output_delay介绍

针对这一类的情况,在做block时,cts之后,便需要将update_io_latency给关闭。那么,计算的timing就是错误的了。对于hier flow来讲,切分block,进行timing budget的时候,clock tree还未长。计算block端口上的timing,通常需要用到set_input_delay和set_output_delay告知工具外部电路的延迟信息,以方便工具计算端口上的timing。此时,工具在计算in2reg的timing时,便会将2.67ns的delay带进来。

芯冰乐 320

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于Vue实现文件上传

基于Vue实现文件上传:form-data、base64、缩略图、进度条、拖拽上传、切片上传

qq_39064418的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vue 文件拖拽上传

<template> <div id="app"> <div class="content"> <div class="drag-area" @dragover="fileDragover" @drop="fileDrop"> <div v-if="fileName" class="file-name">{{ fileName }}</div> <div v-else cl.

qq_1307495的博客 2707

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

vue项目实现文件拖拽上传

1、基本代码 <template> <div id="drop-area" :class="dropActive ? 'drop-active' : ''"> </div> </template> <script> export default { name:'index', data(){ return { dropActive:false } }, methods:{ dropEvent(e) {

weixin_44635214的博客 3476

基于Vue实现文件上传的几种实现方式

到此这篇关于基于Vue实现文件上传的几种实现方式的文章就介绍到这了,更多相关Vue实现文件上传内容请搜索网赚博客https://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持网赚博客https://www.piaodoo.com/!茂名一技http://www.szsyby.net/茂名一技http://www.enechn.com/美文集http://www.tpyjn.cn/手游排行前十名http://www.bjkhrx.com/

菜鸟教程 2075

vue拖拽或点击上传图片

一、预览图 二、实现 点击上传思路:将input的type设置为“file”类型即可上传文件。隐藏该input框,同时点击按钮时,调取该input的点击上传功能。剩下的就是css优化页面了。 拖拽上传思路:通过给拖拽框dropbox绑定拖拽事件,当组件销毁时解绑事件。在拖拽结束,通过event.dataTransfer.files获取上传的文件信息。然后在对文件进行上传服务器操作。 接下来请允许我简单介绍一下各个组件: upload.vue封装了点击上传的逻辑,而进度条则没有做,后期可基于percent

Little_Fishs的博客 3482

AI如何帮你快速实现Vue文件上传功能

生成的代码首先创建了一个标准的Vue单文件组件,引入了vue-simple-uploader库,并在data中初始化了必要的状态变量,包括上传文件列表、上传选项配置等。最近在开发一个需要文件上传功能的后台管理系统,本来打算手动写一个基于vue-simple-uploader的组件,但发现配置起来还挺复杂的。最让我惊喜的是它的一键部署功能,生成的组件可以直接预览效果,还能随时调整参数重新生成。通过简单的配置,启用了拖拽区域功能,用户可以直接将文件拖到指定区域上传,大大提升了用户体验。

BlackironLynx23的博客 923
上一篇: 【工具】vue 图片上传(单张/多张)
下一篇: js 常用正则表达式
谭CV
博客等级 码龄9年 73粉丝 85原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值