Layui文件上传带进度条

最近项目有个需求,要求文件上传有实时进度条,前端框架使用的是layui,但是layui的文件上传(upload)和进度条并没有做结合,这里只能靠改源码的方式实现之,折腾了蛮久,最后还是在公司前端的帮助下完成了,感谢。

1.修改layui文件上传ajax的代码:

这里使用的是layui(2.4.3版本)的非模块化 (layui.all.js),模块化请修改modules/upload.js

直接复制粘接进去即可:

xhr:function () {
	var newXhr = i.ajaxSettings.xhr();
	// 给xhr的upload添加progress的监听
	newXhr.upload.addEventListener('progress' , function (e) {
		var percent = Math.floor(e.loaded / e.total * 100); //计算出进度
		typeof l.progress === 'function' && l.progress(e , percent); // 传递给upload的progress回调
	});
	return newXhr;
},

2.页面以及upload

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>文件上传进度条</title>
		<script src="../static/jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script>
		<script src="../static/layui.all.js" type="text/javascript" charset="utf-8"></script>
		<link rel="stylesheet" type="text/css" href="../static/css/layui.css" />
	</head>

	<body>
		<button type="button" class="layui-btn" id="chooseFile">
  			<i class="layui-icon">&#xe67c;</i>选择文件
		</button> 文件名称: <span id="fileName"></span>
		<div style="height: 20px;"></div>
		<button type="button" class="layui-btn" id="uploadBtn">
  			<i class="layui-icon">&#xe67c;</i>上传文件
		</button>
		<div style="height: 20px;"></div>
		<div class="layui-progress layui-progress-big" lay-showPercent="yes" lay-filter="progressBar">
			<div class="layui-progress-bar layui-bg-red" lay-percent="0%"></div>
		</div>
		<script type="text/javascript">
			var upload = layui.upload,
				element = layui.element;
			element.init();
			
			
			upload.render({
				elem: '#chooseFile', // 文件选择
				accept:'file',
				url: '/fileUpload',
				auto: false, // 设置不自动提交
				bindAction: '#uploadBtn', // 提交按钮
				progress: function(e , percent) {
					console.log("进度:" + percent + '%');
					element.progress('progressBar',percent  + '%');
				},
				choose: function(obj) {
					obj.preview(function(index, file, result) {
						$("#fileName").html(file.name);
					});
				},
				done: function(res) {
					layer.msg(res.msg);
				},
				error: function(res) {
					layer.msg(res.msg);
				}
			});
		</script>
	</body>
</html>

测试:

搞定!有疑问欢迎留言,反正我也解答不上来哈哈哈。

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
可以使用Spring Boot的MultipartFile类和Thymeleaf模板引擎实现文件批量上进度条显示。以下是一个简单的示例代码: 1. 在Spring Boot项目中的HTML模板中添加以下代码: ``` <form id="uploadForm" enctype="multipart/form-data" action="/upload" method="POST"> <div class="form-group"> <input type="file" name="files" multiple="multiple" onchange="this.form.submit()"> </div> </form> <div class="progress"> <div id="progressBar" class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> </div> ``` 2. 在Spring Boot的Controller中添加以下代码: ``` @PostMapping("/upload") public String uploadFiles(@RequestParam("files") MultipartFile[] files, Model model) { int totalFiles = files.length; int uploadedFiles = 0; for (MultipartFile file : files) { // Upload the file // Increase the uploadedFiles counter by 1 // Update the progress bar in the model } return "upload-success"; } ``` 3. 在上文件的方法中,可以使用Apache Commons FileUpload和IOUtils等工具类来实现文件进度计算,例如: ``` public void uploadFile(MultipartFile file, OutputStream outputStream) throws IOException { InputStream inputStream = file.getInputStream(); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { outputStream.write(buffer, 0, bytesRead); // Update the progress bar in the model based on the number of bytes read } inputStream.close(); outputStream.close(); } ``` 通过以上步骤,你可以使用Spring Boot实现进度条的文件批量上

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值