欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

做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-->

 

相关标签: 杂记