Spring Boot MultiPart文件上传空白屏幕

时间:2018-10-09 11:47:25

标签: spring-mvc spring-boot tomcat

我正在使用嵌入式Tomcat的Spring Boot(1.5)Spring(4.3)FreeMarker。 我要上传文件。可以了我希望最大文件大小为10 MB,并且当用户尝试上传更大的文件以显示消息时。

在application.properties中,我拥有:

spring.http.multipart.max-file-size=10Mb
spring.http.multipart.max-request-size=10Mb

控制器看起来像:

 @RequestMapping(value = "/upload", method = RequestMethod.POST)
public String uploadFiles(@RequestParam("uploadedFile") MultipartFile uploadedFile,
                          @RequestParam("overwrite") Optional<Boolean> overwrite,
                          RedirectAttributes redirectAttributes, ModelMap map) throws IOException {
    String referer = map.get(BaseController.REFERER).toString();
    if (uploadedFile.isEmpty()) {
        redirectAttributes.addFlashAttribute("error", "message.file.upload.missing.file");
        return "redirect:" + referer;
    }
    if (uploadedFile.getOriginalFilename().length() > 75) {
        redirectAttributes.addFlashAttribute("warning", "message.file.upload.big.title");
        return "redirect:" + referer;
    }
    try {
        fileService.write(referer, uploadedFile, overwrite.isPresent() ? overwrite.get() : Boolean.FALSE);
        redirectAttributes.addFlashAttribute("success", "message.file.upload.successful");
    } catch (CustomFileException e) {
        if(e.getMessage().contains("message."))
        redirectAttributes.addFlashAttribute("error", e.getMessage());
        else
            redirectAttributes.addFlashAttribute("error", "message.file.upload.unsuccessful");
    }
    return "redirect:" + referer;
}

我制作了controllerAdvices(因为我希望至少要调用MultipartException。但是不会被调用。 enter image description here

模板如下:

  <form name="uploadingForm" enctype="multipart/form-data" action="${base}/upload" method="POST">
    <p>
    <div><input id="fileInput" type="file" name="uploadedFile"></div>
    <div style="padding-top:20px" id="selectedFiles"></div>
    <input type="checkbox" name="overwrite" value="true">rewrite<br>
    </p>
    <p>
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
        <input type="submit" value="Upload files">
    </p>
</form>
<div>
    <div>Uploaded files:</div>
    <#list uploadedFiles as file>
        <div>
            <a href="http://localhost:8082/funding/file/getFile/${file.getName()}/${file.getId()?c}">${file.getName()}</a>

            <span>type</span><span>${file.getExtension()}</span>
            <span>size</span><span>${file.getSize()}</span>
            <span>version</span><span>${file.getVersion()}</span>
            <span>version</span><span>${file.getCreatedDate()?date}</span>
            <span>version</span><span>${file.getModifiedDate()?date}</span>

            <a href="http://localhost:8082/funding/file/delete/${file.getId()?c}">delete</a>

        </div>
    </#list>

</div>

enter image description here

当我要上传10MB以下的文件时,我没有问题,并调用了我的控制器。如果我要上传更大的文件,我就没有任何例外: enter image description here

页面为空,根本没有调用控制器,也没有调用ControllerAdvice。 我尝试调试没有成功。我以某种方式认为请求没有发送到终点。但是从上一个屏幕截图中,您可以看到它的状态为200。

我正在使用标准的MultipartResolver。

谢谢。

经过长时间的调试后,问题与我使用的csrf令牌有关。在某种程度上,它没有提供给请求。

0 个答案:

没有答案