当前位置: 首页 > 知识库问答 >
问题:

react+spring boot上载文件和表单数据

郎项禹
2023-03-14

我有一个案例像在我的表格(前端),我可以填写个人数据(姓名,地址,DOB)然后我可以附上多个图像。

在我的spring boot控制器中:

@RequestMapping(value = "/addCustOrder", method = RequestMethod.POST, consumes = {"multipart/form-data"})
    public String CustomerOrder(@ModelAttribute CustOrderRequest coReq, HttpServletRequest request) {
    System.out.println("debug ************** ");
    System.out.println("ReceiverName :: " + coReq.getReceiverName());
    System.out.println("attachmentFile :: " + coReq.getFileAttachment().length);
}

我的模型包装:

public class CustOrderRequest {
    private String receiverName;
    private String receiverPhone;
    private String itemDescription;
    private MultipartFile[] fileAttachment;
}
//setter & getter 
const payload = JSON.stringify({
    id: values.id,
    receiverName: values.receiverName,
    receiverPhone: values.receiverPhone,
    itemDescription: values.itemDescription,
    fileAttachment: values.fileAttachment
});

axios.post(urlApi, payload)
    .then(r => {
    // success request 
    });

更新的前端代码:

let fd = new FormData();
fd.append("fileAttachment", values.fileAttachment);
fd.append("receiverName", values.receiverName);

axios.post(urlApi, fd)
    .then(r => {
    // success request 
    });

使用formdata更改了前端代码,然后在后端出现错误:

2020-02-07T17:36:10.231+0700 WARN Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'custOrderRequest' on field 'fileAttachment': rejected value [[object FileList]]; codes [typeMismatch.custOrderRequest.fileAttachment,typeMismatch.fileAttachment,typeMismatch.[Lorg.springframework.web.multipart.MultipartFile;,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [custOrderRequest.fileAttachment,fileAttachment]; arguments []; default message [fileAttachment]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile[]' for property 'fileAttachment'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile' for property 'fileAttachment[0]': no matching editors or conversion strategy found]]

共有1个答案

上官自明
2023-03-14

您正在服务器端使用multipart/form-data,因此必须将数据作为formdata发送。

使用const formData=new formData(form);而不是json.stringify

您的第二个例外是绑定错误,您试图将string绑定到multipart,这是因为这一行

fd.append("fileAttachment", values.fileAttachment);

1-您可以在文件的表单中设置OnChange,如OnFileChangeHandler

<input type="file" className="form-control" name="file" onChange={this.onFileChangeHandler}/>

2-在formdata中设置上载文件并发送(如下面的代码)

onchange的正文可以如下所示

onFileChangeHandler = (e) => {
        e.preventDefault();
        this.setState({
            selectedFile: e.target.files[0]
        });
        const formData = new FormData();
        formData.append('file', this.state.selectedFile);
        //Append the rest data then send
        axios({
           method: 'post',
           url: 'myurl',
           data: formData,
           headers: {'Content-Type': 'multipart/form-data' }
        })
        .then(function (response) {
           //handle success
           console.log(response);
        }, 
        function(error) { 
           // handle error 
        });
 类似资料:
  • 本文向大家介绍详解SpringBoot文件上传下载和多文件上传(图文),包括了详解SpringBoot文件上传下载和多文件上传(图文)的使用技巧和注意事项,需要的朋友参考一下 最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的Java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程:   3、工程框架   4、pom.xml文件依赖项

  • 我有一个多部分表单,其中请求的第一部分是表单数据,第二部分是文件。请求的第一部分缺少一个文件名,第二部分有一个空的有效负载,二进制内容应该在其中显示。 第一个内容处置缺少文件名="消息"。我试着把它改成Blob,但是负载是空的。不管我怎么做,我都无法让文件显示在负载中。它应该显示类似于PDF的东西 我的ajax请求:

  • 本文向大家介绍springboot实现文件上传和下载功能,包括了springboot实现文件上传和下载功能的使用技巧和注意事项,需要的朋友参考一下 spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心。大部分的配置从开发人员可见变成了相对透明了,要想进一步熟悉还需要关注源码。 1.文件上传

  • 我正在尝试为博客上的帖子创建一个评论系统。我创建了一个上传评论的表单。表中正确填充了user_id和post_id列,但是,在输入文本并提交时,body列为空。我定义了一种关系,一篇帖子有很多评论。此外,我还定义了一个用户有许多注释。这是我的密码: 表格: 我现在还不关心显示评论,只是把它们上传到数据库。用户id和post id正确上传到数据库中,文本不会保存。提前谢谢。

  • 问题内容: 我是angular.js的初学者,但是对基础知识有很好的了解。 我要做的是上传文件和一些表单数据作为多部分表单数据。我读到这不是angular的功能,但是3rd party库可以做到这一点。我已经通过git克隆了angular-file-upload,但是仍然无法发布简单的表单和文件。 有人可以提供如何执行此操作的示例,html和js吗? 问题答案: 首先 您无需对结构进行任何特殊更改

  • 问题内容: 为什么没有用于Twitter引导程序的精美文件元素上载按钮?如果为上传按钮实现了蓝色的主按钮,那就太好了。甚至可以使用CSS精细化上传按钮吗?(似乎是无法操纵的本机浏览器元素) 问题答案: 这是Bootstrap 3和Bootstrap 4的解决方案。 要制作看起来像按钮的功能文件输入控件,您只需要HTML: 的HTML 这适用于所有现代浏览器,包括IE9 +。如果您还需要对旧IE的支