百里香叶绑定文件到对象

时间:2019-12-01 12:01:22

标签: java spring thymeleaf

我试图将多个文件作为字节数组绑定到一个对象,但是百里香叶却只将文件名作为字节数组绑定。如何在控制器中捕获文件?或绑定文件字节?

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";
}

1 个答案:

答案 0 :(得分:0)

您需要做两项更改:

  1. 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名称创建。

  1. 更新您的TestObject类以将privatekeypublickey的类型更改为org.springframework.web.multipart.MultipartFile类型,这样您将获得文件字节以及其他的元数据该文件,例如原始文件名,内容类型。