java - thymeleaf 将文件绑定(bind)到对象

标签 java spring thymeleaf

我试图将多个文件作为字节数组绑定(bind)到一个对象,但 thymeleaf 只将文件名绑定(bind)为字节数组。我如何捕获 Controller 中的文件?或者绑定(bind)文件字节?

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>

测试对象如下:

public class TestObject {
...
@Column(name = "privatekey")
private byte[] privatekey;

@Column(name = "publickey")
private byte[] publickey;
}

Controller :

@PostMapping("/add")
    public String singleFileUpload(@ModelAttribute("testObject") TestObject testObject,
                               RedirectAttributes redirectAttributes,
                               Principal principal) {

    testObjectService.save(testObject);
    return "redirect:test/page";
}

最佳答案

您需要进行两项更改:

  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 创建> 姓名。

  • 更新您的 TestObject 类,将 privatekeypublickey 的类型更改为 org.springframework.web.multipart 类型.MultipartFile 这样您将获得文件字节以及文件的其他元数据,例如原始文件名、内容类型。
  • 关于java - thymeleaf 将文件绑定(bind)到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59125303/

    相关文章:

    java - 检查断言是否启用

    java - 为什么.NoSuchMethodError : org. springframework.core.convert.converter.ConverterRegistry.addConverter

    javascript - 使用Spring,我需要将动态数据传入html来构建网页

    java - Thymeleaf @Valid LazyInitializationException

    java - 来自 Java 的 CPython?

    java - XStream - com.thoughtworks.xstream.converters.ConversionException

    java - 如何使用 ByteBuddy 向现有实例添加字段?

    java - Spring文件上传引导问题

    java - 在 Spring Boot 应用程序中使用 @Valid 和 BindingResult 时出现表单输入验证问题

    java - Java用逗号或点和两个十进制值验证价格