Springboot上传文件&显示进度条

Springboot上传文件&显示进度条StepOne引入依赖<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version></dependency&…

大家好,又见面了,我是你们的朋友全栈君。

Springboot上传文件&显示进度条

 

Step One 引入依赖

<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.4</version>
</dependency>

 

Step Two 配置文件解析对象

@Bean(name="multipartResolver")
public MultipartResolver multipartResolver(){
	return new CommonsMultipartResolver();
}

 

Step Three  jsp兼样式

<style type="text/css">
#progressBar {
	width: 300px;
	height: 20px;
	border: 1px #EEE solid;
}

#progress {
	width: 0%;
	height: 20px;
	background-color: lime;
}

.form {
	margin: 10px 345px;
}
</style>

<body>
	<div class="modal-body form ">
		<form id="dialogForm" class="form-horizontal">
			<div class="form-group">
				<label class="col-md-3 col-sm-3  col-xs-3 control-label">版本号:
				</label>
				<div class="col-md-7 col-sm-7  col-xs-7">
					<input type="text" class="form-control " placeholder="请输入版本号"
						id="version">
				</div>
			</div>
			<div class="form-group">
				<label class="col-md-3 col-sm-3 col-xs-3 control-label">部门:
				</label>
				<div class="col-md-7 col-sm-7  col-xs-7">
					<input type="file" name="file" id="file" onchange="upload()">
				</div>
			</div>
			<div class="form-group">
				<label class="col-md-3 col-sm-3  col-xs-3 control-label">上传进度:
				</label>
				<div class="col-md-7 col-sm-7  col-xs-7">
					<!--进度条部分(默认隐藏)-->
					<div class="progress-body">
						<span style="display: inline-block; text-align: right"></span>
						<progress></progress>
						<percentage>0%</percentage>
					</div>
				</div>
			</div>
			<div class="form-group">
				<label class="col-md-3 col-sm-3  col-xs-3 control-label">版本修改内容:
				</label>
				<div class="col-md-7 col-sm-7  col-xs-7">
					<textarea rows="3" cols="47" id="description"></textarea>
				</div>
			</div>
		</form>
		<div class="modal-footer">
			<button type="button" class="btn blue" id="addBtn"
				style="background: #11C2EE; color: #fff">提交</button>
		</div>
	</div>

	<input type="text" hidden="true" id="appUrl">
</body>

Step four  js(需引入jquery)

function upload() {
		// 验证文件内容
		var file = $("#file")[0].files[0];
		if (!file.name.endWith(".apk")) {
			alert("请选择.apk文件");
			return;
		}
		// 上传
		doIt()
	}

	function doIt() {
		var formData = new FormData();
		formData.append("file", $("#file")[0].files[0]);
		$.ajax({
			contentType : "multipart/form-data",
			url : "/mote/app/upload.action",
			type : "POST",
			data : formData,
			processData : false, // 告诉jQuery不要去处理发送的数据 
			contentType : false, // 告诉jQuery不要去设置Content-Type请求头 
			success : function(data) {
				$("#appUrl").val(data); // 保存文件路径
			},
			xhr : function() {
				var xhr = $.ajaxSettings.xhr();
				if (xhr.upload) {
					//处理进度条的事件
					xhr.upload.addEventListener("progress", progressHandle,
							false);
					//加载完成的事件 
					xhr.addEventListener("load", completeHandle, false);
					//加载出错的事件 
					xhr.addEventListener("error", failedHandle, false);
					return xhr;
				}
			}
		});
	}

	//进度条更新 
	function progressHandle(e) {
		$('.progress-body progress').attr({
			value : e.loaded,
			max : e.total
		});
		var percent = e.loaded / e.total * 100;
		$('.progress-body percentage').html(percent.toFixed(2) + "%");
	};
	//上传完成处理函数 
	function completeHandle(e) {
		console.log("上传完成");
	};
	//上传出错处理函数 
	function failedHandle(e) {
		console.log("上传失败");
	};

	String.prototype.endWith = function(endStr) {
		var d = this.length - endStr.length;
		return (d >= 0 && this.lastIndexOf(endStr) == d)
	}

	// 添加内容
	$("#addBtn").click(function() {
		var params = {
			version : $("#version").val(),
			url : $("#appUrl").val(),
			description : $("#description").val()
		}

		$.ajax({
			url : "/mote/app/add.action",
			data : JSON.stringify(params),
			type : "POST",
			contentType : "application/json",
			success : function(data) {
				if (data == -1)
					alert("该版本已存在")
				if (data == 1)
					alert("上传成功")
			},
			error : function(data) {
				alert("服务器繁忙");
			}
		});

	});

 

Step five Controller代码

@PostMapping("/upload")
	@ResponseBody
	public ResponseEntity<String> fileUpload(
			@RequestParam("file") MultipartFile file, HttpServletRequest request) {

		// 判断文件是否有内容
		if (file.isEmpty())
			return new ResponseEntity<String>(Constant.isEmpty, HttpStatus.OK);

		try {
			// 获取文件名称
			String fileName = file.getOriginalFilename();

			// 定义上传路径
			// System.getProperty("file.separator") 根据系统获取分隔符
			String path = request.getSession().getServletContext()
					.getRealPath("");
			String contextPath = request.getContextPath();
			path = path.replace(contextPath.substring(1), "") + "apkDir"
					+ System.getProperty("file.separator") + fileName;

			// 根据文件的全路径名字(含路径、后缀),new一个File对象dest
			File dest = new File(path);
			// 如果该文件的上级文件夹不存在,则创建
			if (!dest.getParentFile().exists()) {
				dest.getParentFile().mkdirs();
			}

			// 向指定路径写入文件
			file.transferTo(dest);
			// 返回文件访问路径
			String url = request.getScheme() + "://" + request.getServerName()
					+ ":" + request.getServerPort() + "/apkDir/" + fileName;
			return new ResponseEntity<String>(url, HttpStatus.OK);
		} catch (Exception e) {
			log.info("文件上传失败" + e);
		}
		return new ResponseEntity<String>(Constant.upload_fail, HttpStatus.OK);
	}

	@PostMapping("/add")
	@ResponseBody
	public ResponseEntity<Integer> addV(@RequestBody App app) {
		try {

			// 验证版本是否存在
			int count = uploadService.getApp(app.getVersion());
			if (count > Constant.ZERO)
				return new ResponseEntity<Integer>(Constant.ERROR,
						HttpStatus.OK);
			// 设置时间
			app.setTimestamp(new Date().getTime());

			int numb = uploadService.addV(app);
			if (numb == Constant.ONE)
				return new ResponseEntity<Integer>(Constant.OK, HttpStatus.OK);

		} catch (Exception e) {
			log.info("添加app失败!!!" + e);
		}
		return new ResponseEntity<Integer>(HttpStatus.INTERNAL_SERVER_ERROR);
	}

附录 Constant类

public class Constant {
	
	public static final int OK = 1;
	
	public static final int ERROR = -1;
	
	public static final int ZERO = 0;
	
	public static final int ONE = 1;
	
	public static final int TWO = 2;
	
	public static final int THREE = 3;
	
	public static final String isEmpty = "0";
	
	public static final String isExit = "-2";
	
	public static final String upload_fail = "-1";

}

记录用的 写的不是很用心,有问题的请留言,谢谢

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137674.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 算法 – 堆排序(C#)

    算法 – 堆排序(C#)分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/**堆排序是一种选择排序,时间复杂度为O(nlog&lt;sub&gt;2&lt;/sub&gt;n)。**堆排序的特点是:*在排序过程中,将待排序数组看成是一棵完全二叉树的顺序存储结构,*利用完全二叉树中父结点和…

    2022年7月12日
    16
  • linux运行jar包的命令_linux部署jar包的几种方式

    linux运行jar包的命令_linux部署jar包的几种方式要运行java的项目需要先将项目打包成war包或者jar包,打包成war包需要将war包部署到tomcat服务器上才能运行。而打包成jar包可以直接使用java命令执行。在linux系统中运行jar包主要有以下几种方式。一、java-jarXXX.jar这是最基本的jar包执行方式,但是当我们用ctrl+c中断或者关闭窗口时,程序也会中断执行。二、java-jarXXX.jar&&代表在后台运行,使用ctrl+c不会中断程序的运行,但是关闭窗口会中断程序的运行。

    2022年10月4日
    0
  • Swift注释

    Swift中的普通注释与Objective-C中的一致,大概分为以下三种//单行注释何问起/ *多行注释hovertree.com*////标记注释1 ht

    2021年12月26日
    40
  • 版本号命名规范[通俗易懂]

    版本号命名规范[通俗易懂]写在前面:本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。原文:http://wsfdl.com/devops/2016/09/27/%E7%89%88%E6%9C%AC%E5%8F%B7.html#首先看看某些常见软件的版本号:LinuxKernel:0.0.1,1.0.0,2.6.32,3.0.18…,若用X.Y.Z表示,则偶数Y表示稳定版本,奇数Y表示开发版本。Windo

    2022年9月11日
    0
  • vim查找快捷键_vim搜索关键字命令

    vim查找快捷键_vim搜索关键字命令vim有强大的字符串查找功能。我们通常在vim下要查找字符串的时候,都是输入/或者?加需要查找的字符串来进行搜索,比如想搜索super这个单词,可以输入/super或者?super,两者的区别是前者是从上往下搜索,后者是从下往上搜索。那么如果我想搜索本行中某个单词,并且这个单词很长的时候,手动输入该字符串是非常麻烦的…

    2022年9月24日
    0
  • html中表单的校验的插件,jquery表单验证插件validationEngine「建议收藏」

    html中表单的校验的插件,jquery表单验证插件validationEngine「建议收藏」插件的特色:封装强悍、例子充足(基本都验证类型都被囊括)、调用轻便注意事项:1.演示版本为v2.2.4;2.v2.0以下的版本参数并不完全通用;对validationEngine.jquery.css文件进行修改,修改如下:1.提示内容字体改为宋体;2.去除中各浏览器的私有属性(各浏览器已经支持圆角和阴影,不再需要加私有属性)。对jquery.validationEngine.js文件…

    2022年9月28日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号