Что я хотел сделать: Когда пользователь загружает файл *.json
(фактически три, но два других опускаются, чтобы сначала протестировать случай с одним файлом), контроллер анализирует JSON и изменяет значение вбаза данных.Файл не будет нигде сохранен, но будет просто удален после прочтения.
Метод контроллера:
@RequestMapping(value = "/update/post", method = RequestMethod.POST, consumes = "multipart/form-data")
public String updateP
(
Model model,
@RequestParam(value = "dancer_info", required = false) MultipartFile dancerInfo,
// if required set to true, it says "Required request part 'dancer_info' is not present".
HttpServletRequest request
)
{
if (dancerInfo == null)
{
model.addAttribute("dancer", "Null");
}
else
{
String jsonDancerInfo = dancerInfo.toString();
model.addAttribute("dancer", jsonDancerInfo);
}
return "update_complete";
}
Форма в update.html
(с использованиемBootstrap 4):
<form th:action="@{/update/post}" method="post" enctype="multipart/form-data">
<div class="input-group mb-3">
<div class="custom-file">
<input type="file" class="custom-file-input" id="dancer_info" name="dancer_info">
<label class="custom-file-label" for="dancer_info">dancer_info.json</label>
</div>
</div>
<div class="input-group mb-3 justify-content-center align-items-center">
<input type="submit" class="btn btn-primary" value="Submit" />
</div>
</form>
MultipartResolver
bean:
@Bean
public MultipartResolver multipartResolver()
{
CommonsMultipartResolver mr = new CommonsMultipartResolver();
mr.setMaxInMemorySize(102400);
mr.setMaxUploadSize(102400);
return mr;
}
Шаблон update_complete.html
:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>dancer <span th:text="${dancer}"></span></p>
</body>
</html>
Результат: dancer Null
- Я ожидал что-то вроде
dancer dancer_info.json
или что-то от MultipartFile.toString()
То, что я пробовал раньше:
- Использование
StandardServletMultipartResolver
вместо CommonsMultipartResolver
: я не смог найти setMaxUploadSize()
эквивалент, поэтому я не могу применить это. - Использование
@RequestBody
вместо @RequestParam
: тот же результат. - Переименование
dancer_info
в file
: тот же результат.
Чего не хватает в моем случае?
- Редактировать : Из комментария @JB Низета я добавил
name="dancer_info"
в тег <input>
, но результат был таким же.