Я пытаюсь создать приложение Spring Boot, которое загружает файлы и сохраняет их в HttpSession для будущего использования (только для образовательной цели). У меня проблема с файлами 'MultipartFile getSize(). Он возвращает ненулевые значения в методе обработчика POST и возвращает нули каждый раз, когда я получаю их из HttpSession в методе обработчика GET. В то же время getOriginalFileName() возвращает правильные имена. Поэтому моя таблица «Загруженные файлы:» отображает имена файлов правильно, но размеры - нули.Хранение MultipartFile в HttpSession
Возможно, я концептуально неправильно пытаюсь сохранить MultipartFile в HttpSession?
Как шаблоны я использую Thymeleaf.
Вот шаблон:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
lang="en">
<head>
<title>File Uploader</title>
</head>
<body>
<form method="POST" action="upload" enctype="multipart/form-data">
<input type="file" name="files" id="files" multiple="multiple"/> <br/>
<input type="submit" value="Upload" name="upload" id="upload"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
</form>
<h3>Loaded files:</h3>
<table border="1px">
<thead>
<tr>
<td>File name</td>
<td>Size</td>
</tr>
</thead>
<tr th:each="file : ${uploadedFiles}">
<td th:text="${file.originalFilename}"/>
<td th:text="${file.size}"/>
</tr>
</table>
<form method="POST" action="confirm">
<input type="submit" value="Confirm" name="confirm" id="confirm"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
</form>
</body>
</html>
Вот контроллер:
@Controller
public class IndexController {
@RequestMapping("/")
public String index(Model model, HttpSession httpSession) {
List<MultipartFile> uploadedFiles = (List<MultipartFile>) httpSession.getAttribute("uploadedFiles");
model.addAttribute("uploadedFiles", uploadedFiles);
return "index";
}
@RequestMapping(value = "upload", method = RequestMethod.POST)
public String index(@RequestParam("files") MultipartFile[] files, HttpSession httpSession) {
List<MultipartFile> uploadedFiles = (List<MultipartFile>) httpSession.getAttribute("uploadedFiles");
if (uploadedFiles != null) {
uploadedFiles.addAll(Arrays.asList(files));
} else {
uploadedFiles = Arrays.asList(files);
}
httpSession.setAttribute("uploadedFiles", uploadedFiles);
return "redirect:";
}
}
это было очень полезно для me..thanks приятеля –