超详细:springboot+js实现上传文件夹(目录结构不变)

上传文件大家都写过,直接上传目录我也是第一次写,经过一番百度编程,结合项目需求,变为以下代码,仅供参考。

前台html整页代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件夹</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
</head>
<body>
<form action="/file/upload" enctype="multipart/form-data" method="post">
    <input type='file' webkitdirectory >
    <button id="upload-btn" type="button">upload</button>
</form>
</body>

<script>
    $(function () {
        var files = [];
        // 操作dom获取input的数据,多个input的话,用id获取
        $(document).ready(function(){
            $("input").change(function(){
                files = this.files;
            });
        });
        // 绑定点击事件,ajax请求
        $("#upload-btn").click(function () {
            var formData = new FormData();
            for (var i = 0; i < files.length; i++) {
                // "file"是后台接口的参数名
                formData.append("file", files[i]);
            }
            $.ajax({
                url : "换成后台接口路径",
                type : 'POST',
                data : formData,
                contentType : false,
                processData : false,
                cache : false,
                success : function(data) {
                    console.log("成功!");
                }
            });
        })
    })
</script>
</html>

java接口完整代码

@ApiOperation(value = "上传文件夹")
@RequestMapping(value = "/wenjianjia", headers = "content-type=multipart/*", method = RequestMethod.POST)
public Result<Object> upload(@RequestParam("file") MultipartFile[] file) {
    for (MultipartFile mf : file) {
        File file1;
        String name = "";
        try {
            //转换成这个对象,然后我们需要通过里面的FileItem来获得相对路径
            CommonsMultipartFile f2 = (CommonsMultipartFile) mf;
            name = f2.getFileItem().getName();
            file1 = new File(System.getProperty("user.dir") + "/test/" + name);
            file1.mkdirs();
            file1.createNewFile();
            mf.transferTo(file1);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultUtil<Object>().setErrorMsg("上传文件夹失败," + e.getMessage());
        }
    }
    return new ResultUtil<Object>().setSuccessMsg("上传文件夹成功");
}

代码说明:

  • Result是我封装的交互类,你们要换成自己的出参。
  • System.getProperty("user.dir")是java获取项目根目录绝对路径的方法。
  • CommonsMultipartFile需要pom.xml导入依赖。
  • <dependency>
    	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>1.3.1</version>
    </dependency>
  • Application启动类:
    • 须添加以下配置,否则,MultipartFile转CommonsMultipartFile会报错。
    • 允许自动加载,@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
    @SpringBootApplication
    @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
    public class ServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ServerApplication.class, args);
        }
    
        @Bean(name = "multipartResolver")
        public MultipartResolver multipartResolver(){
            CommonsMultipartResolver resolver = new CommonsMultipartResolver();
            resolver.setDefaultEncoding("UTF-8");
            resolver.setResolveLazily(true);
            //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
            resolver.setMaxInMemorySize(20971520);// 根据需求更换大小
            resolver.setMaxUploadSize(104857600);// 根据需求更换大小
            return resolver;
        }
    }

 

测试

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章