我试图将多个文件作为字节数组绑定到一个对象,但是百里香叶却只将文件名作为字节数组绑定。如何在控制器中捕获文件?或绑定文件字节?
HTML:
<form th:action="@{/add}" th:object="${testObject}" method="post">
<span>add key</span>
<input class="btn btn-primary btn-sm" th:field="*{privatekey}" type="file" name="file">
<span>add key</span>
<input class="btn btn-primary btn-sm" th:field="*{publickey}" type="file" name="file">
<button type="submit">Seve</button>
testObject之类的
public class TestObject {
...
@Column(name = "privatekey")
private byte[] privatekey;
@Column(name = "publickey")
private byte[] publickey;
}
控制器:
@PostMapping("/add")
public String singleFileUpload(@ModelAttribute("testObject") TestObject testObject,
RedirectAttributes redirectAttributes,
Principal principal) {
testObjectService.save(testObject);
return "redirect:test/page";
}
答案 0 :(得分:0)
您需要做两项更改:
enctype
添加到form
元素并更新form
,如下所示:<form th:action="@{/handle-file-upload}" th:object="${fileObj}" method="post"
enctype="multipart/form-data">
<span>add key</span>
<input class="btn btn-primary btn-sm" th:field="*{file1}" type="file">
<span>add key</span>
<input class="btn btn-primary btn-sm" th:field="*{file2}" type="file">
<button type="submit">Save</button>
</form>
在使用th:field
时,您不需要提供name
属性,因为它将由Thmeleaf使用th:field
名称创建。
TestObject
类以将privatekey
和publickey
的类型更改为org.springframework.web.multipart.MultipartFile
类型,这样您将获得文件字节以及其他的元数据该文件,例如原始文件名,内容类型。