Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Thymeleaf将文件上载到@modeldattribute_Java_Spring Boot_Thymeleaf - Fatal编程技术网

Java 使用Thymeleaf将文件上载到@modeldattribute

Java 使用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}" /> &

如何使用Thymeleaf将文件上载到@modeldattribute? 我正在做的事情是:

upload.html

<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和模型类实现这一点。)