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

后端接口代码:

 @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>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于简单Agent对医疗数据进行分析

数据表 供应商资格审核规定.pdf 医生名录.xlsx 历史就诊记录.xlsx 患者信息名录.xlsx 药品.xlsx 药品库存管理.xlsx 采购单位基本信息.xlsx Agent测试 模型基于ChatGPT-3.5 问题&#xff1a;帮我找出不达标的供应商 Agent分析过程 [Thought: 0] Key Concepts: - 不达标的供…

P7 品牌管理

逆向生成页面 新增菜单—商品系统的品牌管理 —product/brand 在代码生成器得到的文件中&#xff0c; main-resources-src-views-modules-product brand.vue、brand-add-or-update.vue放到category.vue同级vue文件有新增、删除按钮&#xff0c;但页面未显示&#xff0c;是因…

嵌入式Linux系统中RTC应用的操作详解

第一:RTC的作用以及时间简介 “RTC”的英文全称是Reul-Time Clock,翻译过来是实时时钟芯片.实时时钟芯片是日常生活中应用最为广泛的电子器件之一,它为人们或者电子系统提供精确的实时时间,实时时钟芯片通过引脚对外提供时间读写接口,通常内部带有电池,保证在外部系统关…

【Android】使用EventBus进行线程间通讯

EventBus 简介 EventBus&#xff1a;github EventBus是Android和Java的发布/订阅事件总线。 简化组件之间的通信 解耦事件发送者和接收者 在 Activities, Fragments, background threads中表现良好 避免复杂且容易出错的依赖关系和生命周期问题 Publisher使用post发出…

好书推荐-人工智能数学基础

本书以零基础讲解为宗旨&#xff0c;面向学习数据科学与人工智能的读者&#xff0c;通俗地讲解每一个知识点&#xff0c;旨在帮助读者快速打下数学基础。    全书分为 4 篇&#xff0c;共 17 章。其中第 1 篇为数学知识基础篇&#xff0c;主要讲述了高等数学基础、微积分、泰…

鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】

应用启动框架AppStartup 概述 AppStartup提供了一种更加简单高效的初始化组件的方式&#xff0c;支持异步初始化组件加速应用的启动时间。使用启动框架应用开发者只需要分别为待初始化的组件实现AppStartup提供的[StartupTask]接口&#xff0c;并在[startup_config]中配置App…

Open vSwitch 数据包处理流程

一、Open vSwitch 数据包转发模式 Open vSwitch 根据不同的模块使用&#xff0c;主要分为两种数据包的转发模式&#xff1a;Datapath 模式和 DPDK 模式&#xff0c;这两种模式的主要区别在于&#xff1a; Datapath 模式&#xff1a; 使用内核空间的网络栈进行数据包的转发性能相…

理解和实现 LRU 缓存置换算法

引言 在计算机科学中&#xff0c;缓存是一种用于提高数据访问速度的技术。然而&#xff0c;缓存空间是有限的&#xff0c;当缓存被填满时&#xff0c;就需要一种策略来决定哪些数据应该保留&#xff0c;哪些应该被淘汰。LRU&#xff08;最近最少使用&#xff09;算法是一种广泛…

UML实现图-部署图

概述 部署图(Deployent Diagram)描述了运行软件的系统中硬件和软件的物理结构。部署图中通常包含两种元素:节点和关联关系&#xff0c;部署图中每个配置必须存在于某些节点上。部署图也可以包含包或子系统。 节点是在运行时代表计算机资源的物理元素。节点名称有两种:简单名和…

android studio开发时提示 TLS 握手错误解决办法

我用的是windows&#xff0c;遇到了这错误&#xff0c; The server may not support the clients requested TLS protocol versions: (TLSv1.2, TLSv1.3). You may need to configure the client to allow other protocols to be used. For more on this, please refer to http…

苍穹外卖笔记-08-套餐管理-增加,删除,修改,查询和起售停售套餐

套餐管理 1 任务2 新增套餐2.1 需求分析和设计接口设计setmeal和setmeal_dish表设计 2.2 代码开发2.2.1 根据分类id查询菜品DishControllerDishServiceDishServiceImplDishMapperDishMapper.xml 2.2.2 新增套餐接口SetmealControllerSetmealServiceSetmealServiceImplSetmealMa…

c++替换字符或字符串函数

在C中&#xff0c;有多种方法可以替换字符串或字符。下面是一些常用的方法&#xff1a; 使用replace函数&#xff1a; replace函数可以替换字符串中的指定字符或子字符串。它的用法如下&#xff1a; string str "Hello World"; str.replace(str.find("World&qu…

Nginx03-动态资源和LNMP介绍与实验、自动索引模块、基础认证模块、状态模块

目录 写在前面Nginx03案例1 模拟视频下载网站自动索引autoindex基础认证auth_basic模块状态stub_status模块模块小结 案例2 动态网站&#xff08;部署php代码&#xff09;概述常见的动态网站的架构LNMP架构流程数据库Mariadb安装安全配置基本操作 PHP安装php修改配置文件 Nginx…

AI做的2024年高考数学试卷,答案对吗?

2024年高考数学考试已经结束&#xff0c;现在呈上数学真题及AI给出的解答。供各位看官欣赏。 总的来说&#xff0c;人工做题两小时&#xff0c;AI解答两分钟。 但是&#xff0c;AI做的答案是否正确&#xff0c;那就要各位看官来评判了&#xff01; 注&#xff1a;试卷来源于…

【Linux】另一种基于rpm安装yum的方式

之前的163的镜像源504网关异常了&#xff0c;网上找到的方法基本都是基于apt&#xff0c;或是基于apt-get。找到了大佬帮忙装了一下&#xff0c;记录如下&#xff1a; wget https://vault.centos.org/7.9.2009/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm…

2024年5大制作AI电子手册工具推荐

AI电子手册作为一种结合了人工智能技术和传统电子手册功能的新型工具&#xff0c;逐渐成为了企业进行知识管理和信息传递的重要工具&#xff0c;为企业提高效率、优化用户体验。在本文中&#xff0c;LookLook同学将简单介绍一下什么是AI电子手册、对企业有什么好处&#xff0c;…

JAVA面试中,面试官最爱问的问题。

Optional类是什么&#xff1f;它在Java中的用途是什么&#xff1f; Java中的Optional类是一个容器类&#xff0c;它用于封装可能为空的对象。在Java 8之前&#xff0c;空值检查是Java编程中一个常见的问题&#xff0c;尤其是在处理返回单个值的方法时。Optional类提供了一种更…

电源变压器的作用和性能

电源变压器的主要作用是改变输入电压的大小&#xff0c;通常用于降低电压或升高电压&#xff0c;以便适应不同设备的需求。它们还可以提供隔离&#xff0c;使得输出电路与输入电路之间电气隔离&#xff0c;从而提高安全性。性能方面&#xff0c;电源变压器需要具有高效率、低温…

Unity3D测量距离实现方法(一)

系列文章目录 unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、Unity距离测量1-1 制作预制体1-2 编写测量的脚本 &#x1f449;二、鼠标点击模型进行测量&#x1f449;二、字体面向摄像机的方法&#x1f449;二、最短距离测量方法&#x1f449;三、壁纸分享…

Python中的装饰器链(decorator chain)是什么

在Python中&#xff0c;装饰器是一种高级功能&#xff0c;它允许你在不修改函数或类代码的情况下&#xff0c;为它们添加额外的功能。装饰器通常用于日志记录、性能测量、权限检查等场景。当多个装饰器应用于同一个函数或类时&#xff0c;它们会形成一个装饰器链&#xff08;de…