Java 春季多用户文件上传

Java 春季多用户文件上传,java,spring,maven,spring-mvc,Java,Spring,Maven,Spring Mvc,我在Spring中创建了一个web应用程序,它允许多个用户同时上传文件,也可以将文件分块上传,这样就不会出现内存问题,但我当前的代码只允许一个用户一次上传一个文件。在第一个文件完成之前,第二个文件不会启动。我将如何着手纠正这个问题 这是我的上传表格: <body> <div th:if="${message}"> <h2 th:text="${message}"></h2> </div> <

我在Spring中创建了一个web应用程序,它允许多个用户同时上传文件,也可以将文件分块上传,这样就不会出现内存问题,但我当前的代码只允许一个用户一次上传一个文件。在第一个文件完成之前,第二个文件不会启动。我将如何着手纠正这个问题

这是我的上传表格:

<body>
    <div th:if="${message}">
        <h2 th:text="${message}"></h2>
    </div>
    <div>
        <form method="post" enctype="multipart/form-data" action="/">
            <table>
                <tr><td>File to Upload:</td><td><input type="file" name="file" /></td></tr>
                <div id="drop_zone">Drop files here</div>
                <output id="list"></output>
                <tr><td></td><td><input type="submit" value="Upload" /></td></tr>
            </table>
        </form>
    </div>
    <div>
        <ul>
            <li th:each="file : ${files}">
                <a th:href="${file}" th:text="${file}" />
            </li>
        </ul>
    </div>
</body>
我今年春天才3个月大,所以任何帮助都将不胜感激


谢谢

您可以将html从
更改为
,这样您就可以获得一个可以选择多个文件的表单

在此之后,您只需更改控制器中的post方法,以便获得一个MultipartFile数组。这样您就可以遍历这个数组并逐个处理文件

@PostMapping("/")
public String handleFileUpload(@RequestParam("manyfiles") MultipartFile[] files,
                           RedirectAttributes redirectAttributes) {

    for(MultipartFile file : files) {
        //Your upload code
    }
}
编辑:

如果需要asynchonus上载,请将byted传递给上载方法,并将其标记为async

@Async
public void process(byte[] bs){
    //do some long running processing of bs here
}

@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                           RedirectAttributes redirectAttributes) {
    upload.process(IOUtils.toByteArray(file));
}

感谢您的快速回复,但您的解决方案允许我选择多个文件。我希望多个用户同时上传文件。当前,如果用户A正在上载一个大文件,则用户B的上载将等待第一个文件完成。所以基本上我在看一个异步文件上传
spring.http.multipart.max-file-size=15000MB
spring.http.multipart.max-request-size=15000MB
@PostMapping("/")
public String handleFileUpload(@RequestParam("manyfiles") MultipartFile[] files,
                           RedirectAttributes redirectAttributes) {

    for(MultipartFile file : files) {
        //Your upload code
    }
}
@Async
public void process(byte[] bs){
    //do some long running processing of bs here
}

@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                           RedirectAttributes redirectAttributes) {
    upload.process(IOUtils.toByteArray(file));
}