无法将React的多部分/表单数据发布到Spring

时间:2019-07-11 22:14:45

标签: reactjs rest spring-boot

我想从React获取文件上传并将其发送到springboot。 我正在尝试从React FormData发布,它将包含文件名和将为XML的文件的键值对。因此,当我尝试将FormData发布到我的后端Springboot时,它将返回:

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved 
[org.springframework.web.HttpMediaTypeNotSupportedException: 
Content type 'application/json;charset=UTF-8' not supported]

这是我的React代码:

handleSubmit = (e) => {
e.preventDefault();
console.log(this.state.file[0].name);
const formData = new FormData();
var i = this.state.file.length;
console.log(i);
for (var j = 0; j < i; j++) {
    formData.append(this.state.file[j].name, this.state.file[j])
}
for (var pair of formData.entries()) {
    console.log(pair[0] + ',' + pair[1]);
}

Axios.post('http://localhost:8080/upload', {
    file:formData
  })
  .then(response=>{
      console.log(response)
  })
  ;

这是我的Springboot控制器:

@CrossOrigin
@RequestMapping(value = "/upload", consumes = "multipart/form-data", method = RequestMethod.POST)
public String upload(@RequestParam("file") MultipartFile[] file) throws IOException {
    System.out.println(file.length);
    for(MultipartFile temp : file) {
        System.out.println(temp.getOriginalFilename());
        System.out.println(temp.getSize());
        File converted = new File(temp.getOriginalFilename());
        temp.transferTo(converted);
        System.out.println(converted.getTotalSpace());
    }
        return "blah";

}

我已经尝试过在Axios发布请求的标头中指定multipart / form-data,但是它似乎没有用。 是我的请求中的问题还是我的控制器? 请让我知道是否有任何想法,我已经将头撞在墙上几个小时,试图解决这个问题。

2 个答案:

答案 0 :(得分:0)

在发送请求时尝试headers: {'Content-Type': undefined},。还要确保您在表单上有enctype="multipart/form-data"

Also refer it

答案 1 :(得分:0)

-您可以尝试将控制器更改为以下内容,而不是@RequestParam。

@RequestPart("file") MultipartFile file
  • 也请立即尝试上传单个文件,让我们看看它的运行情况