说明

文件上传作为程序开发最常用的功能之一,上传进度展示也是必须的。但是有时候进度并不准,进度100%了实际上后台尚未接收完毕,本篇就介绍如何利用jquery的form插件来实时反馈文件上传进度。

实现效果


注意:最后100%停了一下才出现返回结果,因为服务器端在将二进制流写入到磁盘中耗费了点时间。

关于jquery.form

1.这个框架集合form提交、验证、上传的功能。
2.这个框架必须和jquery完整版结合,否则使用min则无效。
原理:利用js进行对form进行组装成ajax的url和data,原理还是用ajax来提交,其实这完全可以自己写,但是有这个框架可能会更简单。

  • 支持的功能有:
    -ajaxForm
    -ajaxSubmit
  • formToArray
  • formSerialize
  • fieldSerialize
  • fieldValue
  • clearForm
  • clearFields
  • resetForm

详细用法请参考:https://jquery.malsup.com/form/

开发步骤

1.文件上传类

@Controller
@RequestMapping("/api/file")
public class FileUploadController {
@RequestMapping(value="/upload", method=RequestMethod.POST )
@ResponseBody
public Map<String,Object> uploadFile(@RequestParam("fileItem") MultipartFile fileItem )
{ String filename = fileItem.getOriginalFilename();
try {
byte[] fileBytes = fileItem.getBytes();
Files.write(Paths.get("D:\\tmp\\" + fileItem.getOriginalFilename()), fileBytes);
} catch (IOException e) {
e.printStackTrace(); }
Map<String,Object> result = new HashMap<>();
result.put("code",200);
result.put("message",filename+"上传成功!"); return result;
}
}

2.前端页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.13.0/themes/smoothness/jquery-ui.css"> <!--<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>-->
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery.form/4.3.0/jquery.form.min.js"></script>
<script src="http:///code.jquery.com/ui/1.13.0/jquery-ui.js"></script> <style type="text/css">
.progress{
width: 500px;
height:24px;
line-height:24px;
}
</style>
</head>
<body>
<h1>jquery.form方式展示文件上传进度</h1>
<div id="progressbar" class="progress"></div>
<div class="percent">0%</div > <div id="status"></div>
<form action="/api/file/upload" method="post" enctype="multipart/form-data">
<input type="file" name="fileItem"><br>
<input type="submit" value="Upload File to Server">
</form> <script>
$(function() {
// 初始化进度条
var progressbar = $( "#progressbar" );
progressbar.progressbar({
value: 0
/*change: function() {
progressLabel.text( progressbar.progressbar( "value" ) + "%" );
},
complete: function() {
progressLabel.text( "上传完成!" );
}*/
}); var percent = $('.percent');
var status = $('#status'); $('form').ajaxForm({
beforeSend: function() {
status.empty();
var percentVal = '0%';
//bar.width(percentVal);
percent.html(percentVal);
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
//bar.width(percentVal);
$( "#progressbar" ).progressbar({
value: percentComplete
});
progressbar.find( ".ui-progressbar-value" ).css({
"background": "rgb(105 167 69)"
//"background": '#' + Math.floor( Math.random() * 16777215 ).toString( 16 )
});
percent.html(percentVal);
},
complete: function(xhr) {
status.html(xhr.responseText);
}
});
});
</script>
</body>
</html>

3.修改application.yml

启动配置文件中添加以下内容,因为默认文件上传大小被限制在10m,此处放大到1G。

spring:
servlet:
multipart:
max-file-size: 1000MB
max-request-size: 1000MB

4.启动项目

访问:http://localhost:9000/ajaxupload.html
安图所示测试:

项目源码

觉得有帮助的朋友给老徐来个收藏+点赞+关注,:)

https://gitee.com/indexman/spring_boot_in_action/blob/master/websocket

springboot和jquery.form.js实现监听文件上传进度的更多相关文章

  1. SpringMVC 监听文件上传进度

    Spring MVC 监听文件上传进度 具体实现分三个步骤: 接管CommonsMultipartResolver,重写针对文件上传的请求. 在第一步中写入监听,以获取上传进度. 修改上传部分的配置文 ...

  2. 基于element ui 实现七牛云自定义key上传文件,并监听更新上传进度

    借助上传Upload 上传组件的 http-request 覆盖默认的上传行为,可以自定义上传的实现 <el-upload multiple ref="sliderUpload&quo ...

  3. jquery.form 和MVC4做无刷新上传DEMO

    jquery.form 和MVC4做无刷新上传DEMO HTML: <script src="~/Scripts/jquery-1.10.2.min.js"></ ...

  4. python django + js 使用ajax进行文件上传并获取上传进度案例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. js获取文件上传进度

    js获取文件上传进度: <input name="file" id="FileUpload" type="file" /> &l ...

  6. Node.js:上传文件,服务端如何获取文件上传进度

    内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...

  7. js 实现 input file 文件上传

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  8. Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

    元素识别方法.一组元素定位.鼠标操作.多窗口处理.下拉框.文本域及富文本框.弹窗.JS.frame.文件上传和下载 元素识别方法: driver.find_element_by_id() driver ...

  9. JavaScript实现form表单的多文件上传

    form表单的多文件上传,具体内容如下 formData对象可以使用一系列的键值对来模拟一个完整的表单,然后使用Ajax来发送这个表单 使用<form>表单初始化FormData对象的方式 ...

  10. 前端使用 js 如何实现大文件上传

    前端使用 js 如何实现大文件上传 大文件上传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

随机推荐

  1. JMS微服务开发示例(七)使用 Serilog 作为日志提供者

    nuget 引入: Serilog.Extensions.LoggingSerilog.Settings.ConfigurationSerilog.Sinks.ConsoleSerilog.Sinks ...

  2. Go-插入排序

    // InsertSort 插入排序 // 思路: // 1. 第一个元素默认是已经排好序的 // 2. 从第二个元素开始,依次比较前面一个元素中,如果小于则交换位置 // 插入排序思路: 将一个元素 ...

  3. [转帖]shell 把以空格分隔的变量 分割后的每个字段赋值给变量

    比如我有一个变量 "123 456 789",要求以空格为分隔符把这个变量分隔,并把分隔后的字段分别赋值给变量,即a=123:b=456:c=789 共有3中方法: 法一:先定义一 ...

  4. [转帖]Fiddler抓取Chrome浏览器访问baiud.com报NET::ERR_CERT_COMMON_NAME_INVALID

    错误现象 解决方法: 1.Chrome浏览器地址栏中输:chrome://net-internals/#hsts 2.在Query HSTS/PKP domain处搜索www.baidu.com网站, ...

  5. [转帖]jemalloc 性能测试

    https://wenfh2020.com/2020/07/30/jemalloc/   jemalloc 是一个优秀的内存分配器,通过与系统默认的内存分配器进行比较:jemalloc 内存分配性能比 ...

  6. Grafana监控OracleDB的完整过程

    Grafana监控OracleDB的完整过程 背景 两年前曾经写过一个进行Oracle 监控的简单blog 但是周天晚上尝试进行处理时发现很不完整了. 很多数据获取不到. 晚上又熬夜了好久进行处理. ...

  7. [转帖]LTP使用和分析

    一.安装及编译流程 1.下载LTP LTP 项目目前位于 GitHub,项目地址:https://github.com/linux-test-project/ltp . 获取最新版可以执行以下命令: ...

  8. Loki动态展示linux本地日志

    Loki动态展示linux本地日志 背景 产品需要拆分微服务部署,直接使用K8S部署虽然比较规范但是部署时间较长. 本地文件系统部署简洁快速一些, 但是不太好直接复用一些规范的产品. 本次处理方法就是 ...

  9. 记一次 .NET某工控自动化系统 崩溃分析

    一:背景 1. 讲故事 前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就是爽快,刚好周二晚上 ...

  10. echarts更改x和y轴的颜色

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...