Java 使用Thymeleaf将文件上载到@modeldattribute
如何使用Thymeleaf将文件上载到@modeldattribute? 我正在做的事情是: upload.htmlJava 使用Thymeleaf将文件上载到@modeldattribute,java,spring-boot,thymeleaf,Java,Spring Boot,Thymeleaf,如何使用Thymeleaf将文件上载到@modeldattribute? 我正在做的事情是: upload.html <form method="POST" action="#" th:action="@{/sending}" th:object="${collage}" enctype="multipart/form-data" > <input type="file" th:field="*{picture}" /> &
<form method="POST" action="#" th:action="@{/sending}" th:object="${collage}" enctype="multipart/form-data" >
<input type="file" th:field="*{picture}" />
<input type="file" th:field="*{picture}" />
<input type="submit" value="upload" />
</form>
拼贴类:
public class Collage {
private MultipartFile[] pictures;
public Collage(){}
public MultipartFile[] getCollage() {
return pictures;
}
public void setCollage(MultipartFile[] pictures) {
this.pictures = pictures;
}
}
我得到:
java.lang.IllegalStateException:BindingResult和bean名称“拼贴”的普通目标对象都不能作为请求属性在控制台中使用,并且“/”页上有一个文本:您可以应用这些更改
1) 将@ModelAttibute更改为@RequestParam
2) 使用MultipartFile[]作为参数,并且仅使用单个输入文件html
//name of input html should be collage
@PostMapping("/sending")
public String redirect(@RequestParam("collage") MultipartFile[] files, RedirectAttributes redirectAttr) {
Collections.shuffle(Arrays.asList(files));
redirectAttr.addFlashAttribute("pictures",files);
return "redirect:/collage";
}
还有你的html页面
<form method="POST" th:action="@{/sending}" enctype="multipart/form-data" >
<input type="file" name="collage" multiple="multiple"/>
<input type="submit" value="upload" />
</form>
您可以应用这些更改
1) 将@ModelAttibute更改为@RequestParam
2) 使用MultipartFile[]作为参数,并且仅使用单个输入文件html
//name of input html should be collage
@PostMapping("/sending")
public String redirect(@RequestParam("collage") MultipartFile[] files, RedirectAttributes redirectAttr) {
Collections.shuffle(Arrays.asList(files));
redirectAttr.addFlashAttribute("pictures",files);
return "redirect:/collage";
}
还有你的html页面
<form method="POST" th:action="@{/sending}" enctype="multipart/form-data" >
<input type="file" name="collage" multiple="multiple"/>
<input type="submit" value="upload" />
</form>
一张图片胜过1000字:
现在,编写示例以上载实体内部的多部分文件数组:
<form action="#" th:action="@{/distribution/save}" class="form-horizontal"
role="form" method="post" th:object="${news}" enctype="multipart/form-data">
<input type="hidden" name="id" value="id" th:field="*{id}"> <div class="form-group has-label"> <label for="inputTitle" th:text="#{news.title}">Título</label>
<input type="text" class="form-control" id="inputTitle" th:placeholder="#{news.title}" th:field="*{title}"></div>
<input type="file" name = "multipartFilesDocument" value="multipartFilesDocument" th:field="*{multipartFilesDocument}" multiple="multiple"/>
<button type="submit" class="btn btn-default"><span th:text="#{common.save}"></span></button>
</div>
</form>
实体代码:
public class NewsDTO {
private List<MultipartFile> multipartFilesDocument;
public List<MultipartFile> getMultipartFilesDocument() {
return multipartFilesDocument;
}
public void setMultipartFilesDocument(List<MultipartFile> multipartFilesDocument) {
this.multipartFilesDocument = multipartFilesDocument;
}
}
public class NewsDTO{
私有列表多部分文件文档;
公共列表getMultipartFilesDocument(){
返回多部分文件文档;
}
public void setMultipartFilesDocument(列出multipartFilesDocument){
this.multipartFilesDocument=multipartFilesDocument;
}
}
在这段代码中,真正重要的是enctype=“multipart/form data”
和name=“multipartFilesDocument”value=“multipartFilesDocument”
格式中的
现在,编写示例以上载实体内部的多部分文件数组:
<form action="#" th:action="@{/distribution/save}" class="form-horizontal"
role="form" method="post" th:object="${news}" enctype="multipart/form-data">
<input type="hidden" name="id" value="id" th:field="*{id}"> <div class="form-group has-label"> <label for="inputTitle" th:text="#{news.title}">Título</label>
<input type="text" class="form-control" id="inputTitle" th:placeholder="#{news.title}" th:field="*{title}"></div>
<input type="file" name = "multipartFilesDocument" value="multipartFilesDocument" th:field="*{multipartFilesDocument}" multiple="multiple"/>
<button type="submit" class="btn btn-default"><span th:text="#{common.save}"></span></button>
</div>
</form>
实体代码:
public class NewsDTO {
private List<MultipartFile> multipartFilesDocument;
public List<MultipartFile> getMultipartFilesDocument() {
return multipartFilesDocument;
}
public void setMultipartFilesDocument(List<MultipartFile> multipartFilesDocument) {
this.multipartFilesDocument = multipartFilesDocument;
}
}
public class NewsDTO{
私有列表多部分文件文档;
公共列表getMultipartFilesDocument(){
返回多部分文件文档;
}
public void setMultipartFilesDocument(列出multipartFilesDocument){
this.multipartFilesDocument=multipartFilesDocument;
}
}
在这段代码中,enctype=“multipart/form data”
和name=“multipartFilesDocument”value=“multipartFilesDocument”
在表单中非常重要,它是重复的,请参见@Jorge L.Morla谢谢。但我认为,我的主要问题是它是重复的,请看@Jorge L.Morla谢谢。但我认为,我的主要问题是这不起作用。即使我尝试:@PostMapping(“/sending”)公共字符串重定向(…){System.out.println(collage.getCollage());//这里已经是null了,我正在获取collage.length==0:(对不起,我错了,我忘了更改@RequestParam并添加html更改。它只对@modeldattribute(“obj”)多部分文件有效,所以只对一个文件有效。谢谢!)(然而,我仍然好奇如何使用@ModelAttribute和一个模型类来实现这一点。)这不起作用。即使我尝试:@PostMapping(“/sending”)公共字符串重定向(…){System.out.println(collage.getCollage());//这里已经是null了,我得到的拼贴长度==0:(对不起,我错了,我忘了更改@RequestParam并添加html更改。它只适用于@ModelAttribute(“obj”)多部分文件文件,因此只适用于一个文件。它有效。谢谢!:)(但是我仍然很好奇如何使用@ModelAttribute和模型类实现这一点。)