做Excel上传踩的坑
程序员文章站
2022-03-12 16:55:03
...
因最近项目需要,所以要做一个Excel上传并解析,但在上传这块我就踩了几天的坑,菜是原罪啊,
我一开始是先在自己的spring boot项目中做的实验,以下是spring boot中的:
前端:
<!DOCTYPE html>
<html lang="en">
<object></object>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script typet="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script>
/*导入Excel*/
function uploadExcel() {
/*#load:为按钮,点击后生成一个隐藏的input file标签*/
$('#uploadExcel').after('<input type="file" id="upload_xls" name="file" style="display:none" onchange ="uploadFile()" enctype="multipart/form-data">');
document.getElementById("upload_xls").click();
}
function uploadFile() {
//选择文件
var filePath = $("#upload_xls").val();
//设置上传文件类型
if (filePath.indexOf(".xls") != -1 || filePath.indexOf(".xlsx") != -1) {
var form = new FormData();
form.append('file', $('#upload_xls')[0].files[0]);
//上传文件 'http://localhost:8081/upFile/upload'
/*var obj=document.getElementById("file");
var File_Url=obj.attributes["href"].nodeValue;*/
$.ajax({
url: 'http://localhost:8081/upFile/upload',
type: 'post',
data: form,
cache: false,
//阻止Ajax将参数转成成String类型的键值对,需要设置processData属性为false,
processData: false,
//form的enctype="multipart/form-data"才能上传文件。Ajax的默认编码方式是application/x-www-form-urlencoded
contentType: false,
success: function (r) {
if (r.state == 200) {
alert(r.msg);
}
if (r.state == 300) {//上传文件有错误信息
var filename = r.data;
if (confirm(r.msg)) {
location.href = 'download.do?filename=' + filename;
}
}
}
});
} else {
alert("请选择正确的文件格式!");
return false;
}
}
</script>
</head>
<body>
<button id="uploadExcel" onclick="uploadExcel()"> 上传文件</button>
<!--<a id="file" href="http://localhost:8081/upFile/upload"></a>
<form action="upFile/upload" method="post" enctype="multipart/form-data">
<p><input type="file" name="upload"></p>
<p><input type="submit" value="submit"></p>
</form>-->
</body>
</html>
package com.answer.server.control;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping(name = "upFile",value = "upFile")
@CrossOrigin
public class UpFile {
@RequestMapping(method= RequestMethod.POST, value="/upload")
private String upload(@RequestParam(value = "file",required = false) MultipartFile upload, HttpServletRequest request) throws IOException {
String flag = "";
//String path = request.getRealPath("/") + "../dexing/politik"; // 存放文件的路径
String path ="C:/";
File file = new File(path, upload.getOriginalFilename());
if (file.exists()) { // 判断文件是否已经存在
flag = "1";
return flag;
} else {
try {
upload.transferTo(file); // 将文件写到指定路径下
} catch (Exception e) {
flag = "-1";
e.printStackTrace();
return flag;
}
}
flag = "0";
return flag;
}
}
这个是在网上找的例子,它是好使的,原博客地址我忘记了,但还是十分感谢分享,然后我移到了我那古老的项目中springMVC搭的,一开始直接移过去的,然后前端各种报404,我改url改的心态直接炸了,最后在周末放纵了一把,然后周一来又试了试,一行行的删代码,终于发现在后端接受的时候将MultipartFile改为File它可以找到了,曙光啊,然后就百度了MultipartFile 的用法,妹的,spring boot是自动配置好了,spring MVC还需要xml的配置以及引jar包,唉~菜是原罪, https://www.cnblogs.com/gxlaqj/p/9931333.html 我是在这看到的,啥都不说了,解析去了,
xml配置:
<!-- 上传文件配置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小,单位字节。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="10240000" /><!-- 上传的最大size -->
<property name="maxInMemorySize" value="4096" />
<property name="resolveLazily" value="true" /><!-- 懒接收 -->
</bean>
依赖:
<!-- 添加依赖包,才可以上传文件,否则请求400 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 添加依赖包,才可以上传文件,否则请求400 end-->
上一篇: K8S之路(一) -- Kubeadm搭建K8S集群
下一篇: JavaScript原型