当前位置: 首页 > news >正文

vue 中实现用户上传文件夹的功能

vue 中实现上传文件夹的功能

    • 使用 input 元素的 webkitdirectory 属性
    • 使用 vue-simple-uploader 组件

vue 中文件上传一般都是用 element 中的 upload 组件,upload 组件可以实现单个文件或者多个文件的上传,但是无法通过选择文件夹上传其中文件。

要实现文件夹上传,有两种方式:

  1. 使用 input 元素的 webkitdirectory 属性
  2. 使用 vue-simple-uploader 组件

使用 input 元素的 webkitdirectory 属性

webkitdirectory 属性是一个布尔值,表示是否只允许用户选择一个目录(或多个目录,如果同时存在 multiple 属性)。

注意:webkitdirectory 属性是一个非标准属性,并非所有浏览器都实现了这个属性。
在这里插入图片描述
实现方式如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Upload Folder</title>
</head>
<body><input type="file" id="folderInput" webkitdirectory multiple><button id="uploadButton">Upload</button><script>document.getElementById('uploadButton').addEventListener('click', async () => {// 获取上传的文件列表const input = document.getElementById('folderInput');const files = input.files;if (files.length === 0) {alert('Please select a folder first.');return;}// 创建 formdata 对象const formData = new FormData();for (const file of files) {formData.append('files', file)}// 调用后台接口,上传文件,此处省略</script>
</body>
</html>

使用 vue-simple-uploader 组件

首先安装 vue-simple-uploader

npm i vue-simple-uploader

然后在 main.js 中引入 vue-simple-uploader

import Vue from 'vue'
import uploader from 'vue-simple-uploader'
import App from './App.vue'Vue.use(uploader)/* eslint-disable no-new */
new Vue({render(createElement) {return createElement(App)}
}).$mount('#app')

在模板中使用

<template><uploader :options="options" class="uploader-example"><uploader-unsupport></uploader-unsupport><uploader-drop><p>Drop files here to upload or</p><uploader-btn>select files</uploader-btn><uploader-btn :attrs="attrs">select images</uploader-btn><uploader-btn :directory="true">select folder</uploader-btn></uploader-drop><uploader-list></uploader-list></uploader>
</template><script>export default {data() {return {// 这里配置上传路径,手动上传的话就置空options: {// https://github.com/simple-uploader/Uploader/tree/develop/samples/Node.js// testChunks: false,},// 上传图片的配置attrs: {accept: "image/*",},loadingFile: false,};},methods: {// 文件添加到上传队列时的处理函数onFileAdded(file) {console.log("文件添加到队列:", file);},// 文件上传成功时的处理函数onFileSuccess(rootFile, file, response, chunk) {console.log("文件上传成功:", file, response);// 根据服务器返回的response处理业务逻辑},// 文件上传失败时的处理函数fileError(rootFile, file, response, chunk) {console.error("文件上传失败:", file, response);},// 开始上传时的处理函数uploadStr() {this.loadingFile = true; // 设置加载状态},// 所有文件上传完成时的处理函数uploadEnd() {this.loadingFile = false; // 重置加载状态},},}
</script><style>.uploader-example {width: 880px;padding: 15px;margin: 40px auto 0;font-size: 12px;box-shadow: 0 0 10px rgba(0, 0, 0, .4);}.uploader-example .uploader-btn {margin-right: 4px;}.uploader-example .uploader-list {max-height: 440px;overflow: auto;overflow-x: hidden;overflow-y: auto;}
</style>

需要使用文件分片上传、秒传、断点续传功能可以参考这篇文章

相关文章:

  • 容器基本概念_从虚拟化技术_到容器化技术_开通青云服务器_并远程连接_容器安装---分布式云原生部署架构搭建007
  • 通过MindSpore API实现深度学习模型
  • 聚合大模型场景助力产业升级,WAIC 2024 容联云论坛即将开幕
  • 一键掌控,4G红外插座引领智能生活新潮流!
  • 21、24年--项目管理概论——项目经理的角色
  • Spring Boot集成tensorflow实现图片检测服务
  • 2024广东省职业技能大赛云计算赛项实战——编排部署ERP管理系统
  • 如何设计一个点赞系统
  • Linux系统安装Dify结合内网穿透实现远程访问本地LLM开发平台
  • Redis 数据恢复及持久化策略分析
  • windows系统配置linux环境wsl
  • 深入探索Llama 2:下一代开源语言模型的革新与影响
  • Vue66-vue-默认插槽
  • 01 Shell 编程规范与变量
  • Sklearn之朴素贝叶斯应用
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【刷算法】求1+2+3+...+n
  • android图片蒙层
  • CEF与代理
  • Date型的使用
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • express如何解决request entity too large问题
  • HTTP请求重发
  • java8 Stream Pipelines 浅析
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Webpack 4x 之路 ( 四 )
  • 从0到1:PostCSS 插件开发最佳实践
  • 缓存与缓冲
  • 软件开发学习的5大技巧,你知道吗?
  • 使用SAX解析XML
  • 事件委托的小应用
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • gunicorn工作原理
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • !!Dom4j 学习笔记
  • # SpringBoot 如何让指定的Bean先加载
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (libusb) usb口自动刷新
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (笔试题)分解质因式
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (九)c52学习之旅-定时器
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (原創) 物件導向與老子思想 (OO)
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...