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

前后端实现文件上传进度条-实时进度

后端接口代码:

 @PostMapping("/upload")public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {try {// 获取文件名String fileName = file.getOriginalFilename();// 创建上传目标路径Path targetPath = Paths.get(System.getProperty("user.dir")+"/file", fileName);// 保存文件到本地Files.copy(file.getInputStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);// 返回上传成功信息return ResponseEntity.ok().body("File uploaded successfully: " + fileName);} catch (IOException e) {e.printStackTrace();// 返回上传失败信息return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file: " + e.getMessage());}}

前端代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"><head><meta  http-equiv="Content-Type" charset="UTF-8"><title>文件上传进度条</title><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content=""><meta name="author" content=""><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"><link rel="stylesheet" href="css/sl.css"><style>body {display: flex;flex-direction: column;justify-content: center;align-items: flex-start;}.uploader {display: flex;align-items: center;}.slider-track {width: 70vw;height: 8px;background-color: #080101;margin: 20px 10px 20px 0;border-radius: 4px;}.slider-bar {height: 8px;width: 0px;border-radius: inherit;background-image: linear-gradient(to right, #018eb2, #29c9eb);transition: width;}</style>
</head>
<body><input type="file" onchange="uploadFile(this.files)">
<div class="uploader"><div class="slider-track"><div class="slider-bar"></div></div><div><span class="percentage">0</span>%</div>
</div></body>
</html>
<script type="text/javascript" src="js/jquery-1.8.3-source.js"></script>
<script>function uploadFile(files) {let fd = new FormData();//fd.append('file', files[0], "2.jpg")//设置第三个参数,就按第三个格式和名称来 不建议fd.append('file', files[0])//不设置第三个参数,就上传什么文件存什么文件格式let xhr = new XMLHttpRequest();let sliderBar = document.querySelector(".slider-bar")sliderBar.style.width = "0"xhr.upload.addEventListener("progress", function (e) {let percentage = e.loaded / e.total * 100sliderBar.style.width =  `${percentage}%`document.querySelector(".percentage").innerHTML = `${percentage.toFixed(2)}`})xhr.open('post', 'http://localhost:80/upload')xhr.send(fd)}
</script>

效果:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • linux防止nmap扫描
  • Elasticsearch之写入原理以及调优
  • 数据结构--二叉树(二)
  • iOS 通过PacketLogger 抓包蓝牙数据包
  • 新能源汽车内卷真相
  • Redis常用命令——List篇
  • Spring Boot整合Redis
  • C#WPF数字大屏项目实战08--生产量/良品统计
  • FreeRTOS实时系统 在任务中增加数组等相关操作 导致单片机起不来或者挂掉
  • 四舍五入问题
  • 【ARM Cache 与 MMU 系列文章 7.6 -- ARMv8 MMU 配置 寄存器使用介绍】
  • HTML静态网页成品作业(HTML+CSS)—— 节日端午节介绍网页(5个页面)
  • GAT1399协议分析(8)--批量图像查询
  • 嵌入式学习——Linux高级编程复习(目录IO、软硬连接、makefile)——day38
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • 230. Kth Smallest Element in a BST
  • Android交互
  • ERLANG 网工修炼笔记 ---- UDP
  • express如何解决request entity too large问题
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Redis中的lru算法实现
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 推荐一个React的管理后台框架
  • 学习Vue.js的五个小例子
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 函数计算新功能-----支持C#函数
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (1)(1.11) SiK Radio v2(一)
  • (1)svelte 教程:hello world
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (十六)一篇文章学会Java的常用API
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)SpringBoot3---尚硅谷总结
  • (转)linux 命令大全
  • (转载)Linux 多线程条件变量同步
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .gitignore文件_Git:.gitignore
  • .gitignore文件使用
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net mvc总结
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • @Value读取properties中文乱码解决方案
  • [Angular 基础] - 表单:响应式表单
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++随笔录] 红黑树
  • [Cloud Networking] Layer 2
  • [Gamma]阶段测试报告
  • [go-zero] 简单微服务调用
  • [java]删除数组中的某一个元素
  • [LeetCode] Longest Common Prefix 字符串公有前序