Я использую пружинную загрузку (1.5), пружину (4.3), FreeMarker, встроенный Tomcat.Я хочу загрузить файл.Это работает.Я хочу, чтобы максимальный размер файла был 10 МБ, и когда пользователь пытается загрузить файл большего размера, чтобы показать сообщение.
в приложении. Свойства у меня:
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. Но он не вызывается.
Шаблон выглядиткак это:
<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>
Когда я хочу загрузить файл размером менее 10 МБ, у меня нет проблем, и мой контроллер вызывается. Если я хочузагрузить файл большего размера У меня нет никаких исключений, только это:
A есть пустая страница. Контроллер вообще не вызывается. ControllerAdvice тоже не вызывается. Iпопытался отладить безуспешно. В некотором смысле я думаю, что запрос не отправляется в конечную точку. Но из последнего скриншота вы можете видеть, что он имеет статус 200.
Я использую стандартный MultipartResolver.
Спасибо.
В конце последолгая отладка проблемы была связана с токеном csrf, который я использовал.В некотором смысле это не было предоставлено в запросе.