XHR分段文件上传Spring Boot问题

时间:2019-08-09 22:11:23

标签: javascript spring-boot

我有一个上传进度栏,该进度栏在文件输入时有效,当进度条达到100%时,没有错误。但是当我在Spring Boot中打印文件的内容时,我注意到for循环中的代码未运行。这是代码。请帮忙,谢谢!

JavaScript:

function upload(file) {
    var formData = new FormData();
    formData.append("newFile", file);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/upload');
    xhr.onload = function(e) {
        console.log("xhr onload function");
    };
    var progressBar = document.querySelector('progress');
    xhr.upload.onprogress = function(e) {
        if (e.lengthComputable) {
            progressBar.value = (e.loaded / e.total) * 100;
            progressBar.textContext = progressBar.value;
        }
    };
    xhr.send(formData);
}

Spring Boot:

@RequestMapping(value="/upload", method=RequestMethod.POST)
public String upload(@RequestParam("files") MultipartFile[] files) {

    // This prints [Lorg.springframework.web.multipart.MultipartFile;@........].
    System.out.println(files);
    for (MultipartFile file : files) {
        // This doesn't get printed.
        System.out.println(file.getOriginalFilename());
    }
    return "redirect:/";
}

2 个答案:

答案 0 :(得分:1)

由于MultipartFile[]文件刚刚被初始化,但不包含任何值数组。

更改

public String upload(@RequestParam("files") MultipartFile[] files)

public String upload(@RequestPart(value = "files", required = true) MultipartFile[] files)

答案 1 :(得分:1)

在JavaScript中,您正在将文件添加到“ newFile”变量中,但是在春季,您正在从请求参数“文件”中提取文件。

您要上传多个文件吗?似乎并非如此。仅尝试使用Multipart。