超詳細: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;
        }
    }

 

測試

 

 

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