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

后端接口代码:

 @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 * 100
            sliderBar.style.width =  `${percentage}%`
            document.querySelector(".percentage").innerHTML = `${percentage.toFixed(2)}`
        })
        xhr.open('post', 'http://localhost:80/upload')
        xhr.send(fd)
    }
</script>

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

读书笔记-Java并发编程的艺术-第2章 Java并发机制的底层实现原理

文章目录 2.1 volatile的应用2.1.1 volatile的定义与实现原理2.1.2 volatile的使用优化 2.2 synchronized的实现原理与应用2.2.1 Java对象头2.2.2 锁的升级与对比2.2.2.1 偏向锁2.2.2.2 轻量级锁2.2.2.3 锁的优缺点对比 2.3 原子操作的实现原理2.3.1 术语定义2.3.2 处理器如何实…

Linux 内存管理 SLUB 分配器

文章目录 前言一、SLUB allocator二、SLUB core参考资料 前言 本文来自&#xff1a;https://lwn.net/Articles/229984/ [Posted April 11, 2007 by corbet]SLAB分配器是用于处理“频繁分配和释放的对象”的对象缓存内核内存分配器。它是内存管理子系统中关键的一部分&#xf…

Opencv 色彩空间

一 核心知识 色彩空间变换&#xff1b; 像素访问&#xff1b; 矩阵的、-、*、、&#xff1b; 基本图形的绘制 二 颜色空间 RGB&#xff1a;人眼的色彩空间&#xff1b; OpenCV默认使用BGR&#xff1b; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…

MySQL之查询性能优化(三)

查询性能优化 重构查询的方式 在优化有问题的查询时&#xff0c;目标应该是找到一个更优的方法获得实际需要的记过——而不是一定总是需要从MySQL获取一模一样的结果集。有时候&#xff0c;可以将查询转换一种写法让其返回一样的结果&#xff0c;但是性能更好。但也可以通过修…

关于URL获取的参数,无法执行二选一查询

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Arthas调优工具使用

1&#xff0c;服务器端下载 curl -O https://arthas.aliyun.com/arthas-boot.jar 2&#xff0c;服务器端启动 java -jar arthas-boot.jar 选定要绑定的Java进程ID 3&#xff0c;本地idea安装Arthas idea 4&#xff0c;选定方法右键trace,生成命令 trace com.xxx.xxx.xxx.vouche…

C++之noexcept

目录 1.概述 2.noexcept作为说明符 3.noexcept作为运算符 4.传统throw与noexcept比较 5.原理剖析 6.总结 1.概述 在C中&#xff0c;noexcept是一个关键字&#xff0c;用于指定函数不会抛出异常。如果函数保证不会抛出异常&#xff0c;编译器可以进行更多优化&#xff0c;…

Spring Boot既打jar包又打war包如何做

你好&#xff0c;我是柳岸花开。 引言 在软件开发中&#xff0c;根据不同的部署需求&#xff0c;我们可能需要将应用打包成不同的格式。Spring Boot作为目前流行的Java应用开发框架&#xff0c;提供了一种简单的方式来打包应用。本文将介绍如何利用Maven Profiles在Spring Boot…

JDK8安装详细教程教程-windows

&#x1f4d6;JDK8安装详细教程教程-windows ✅1. 下载✅2. 安装 ✅1. 下载 123云盘下载地址&#xff1a; JDK8 | JDK11 | JDK17 官方Oracle地址&#xff1a;https://www.oracle.com/java/technologies/downloads/archive/ ✅2. 安装 运行jdk-8u211-windows-x64.exe安装包文…

Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug

【2024.5.24回顾】 1 问题描述(描述完自己解决了…) 正常情况 点击添加文章按钮后&#xff0c;弹出文章编辑界面&#xff0c;如果用富文本功能编辑&#xff0c;则一切正常。可以多次打开、关闭 Markdown 如果在弹出层中点击了切换编辑器按钮&#xff0c;会成功切换为markd…

FreeRTOS的使用与编码器设计

第一步&#xff1a;任务创建&#xff1a;在 FreeRTOS 中&#xff0c;系统功能由任务&#xff08;Task&#xff09;组成。在系统启动时&#xff0c;你需要创建各个任务并指定它们的任务频率、优先级、堆栈大小等参数。 xTaskCreate() 来创建开始任务并定义任务的执行函数、优先级…

Java之instanceof 运算符:掌握它的使用方法

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

人工智能--深度神经网络

目录 &#x1f349;引言 &#x1f349;深度神经网络的基本概念 &#x1f348;神经网络的起源 &#x1f34d; 神经网络的基本结构 &#x1f349;深度神经网络的结构 &#x1f348; 卷积神经网络&#xff08;CNN&#xff09; &#x1f348;循环神经网络&#xff08;RNN&…

期权懂基础知识分享:场外期权怎么做?

今天带你了解期权懂基础知识分享&#xff1a;场外期权怎么做&#xff1f;场外个股期权是一种金融工具&#xff0c;用于在股票市场之外交易。 场外期权怎么做&#xff1f; 签订框架协议&#xff1a;个人需要与机构签订场外期权框架协议&#xff0c;通常无需单独开立账户。 询价…

Web3.0区块链技术开发方案丨中心化与去中心化交易所开发

随着区块链技术的不断发展和普及&#xff0c;加密货币交易所成为数字资产市场中的关键组成部分。其中&#xff0c;中心化交易所&#xff08;CEX&#xff09;和去中心化交易所&#xff08;DEX&#xff09;是两种主要的交易所类型。本文将探讨Web3.0区块链技术开发方案&#xff0…

【Postman接口测试】第四节.Postman接口测试项目实战(中)

文章目录 前言五、Postman断言 5.1 Postman断言介绍 5.2 响应状态码断言 5.3 包含指定字符串断言 5.4 JSON数据断言六、参数化 5.1 Postman参数化介绍 5.2 Postman参数化实现 5.3 针对项目登录接口参数化实现 总结 前言 五、Postman断言 5.1 Postman断言介…

Android 应用权限

文章目录 权限声明uses-permissionpermissionpermission-grouppermission-tree其他uses-feature 权限配置 权限声明 Android权限在AndroidManifest.xml中声明&#xff0c;<permission>、 <permission-group> 、<permission-tree> 和<uses-permission>…

TSINGSEE青犀视频汇聚机房动环智能监控方案,提升机房安全稳定性

一、背景需求 在当今信息化时代&#xff0c;机房作为数据中心的核心设施&#xff0c;承载着重要的网络设备和数据存储设备&#xff0c;其正常运行对于企业的数据安全和业务连续性至关重要。机房内部设备众多&#xff0c;且运行过程中涉及大量的数据交换和传输。一旦发生安全事…

[C][数据结构][时间空间复杂度]详细讲解

目录 0.铺垫1.时间复杂度 -- 衡量算法的运行快慢1.是什么&#xff1f;2.大O的渐进表示法 2.空间复杂度 - 衡量算法所需要的额外空间3.常见复杂度对比 0.铺垫 时间是累计的空间是不累计的&#xff0c;可以重复利用 1.时间复杂度 – 衡量算法的运行快慢 1.是什么&#xff1f; …

量化研究---大qmt实盘实现禄得可转债策略轮动

前面写了一个强大的可转债自定义系统&#xff0c;我们可以利用这个快速对接到大qmt,我提供实时数据支持 量化研究---强大的可转债分析系统上线&#xff0c;提供api&#xff0c;实时数据支持 打开网页 http://120.78.132.143:8023/ 强大可转债选择系统 http://120.78.132.143:8…