The request was rejected because no multipart boundary was found in springboot

混江龙づ霸主 提交于 2019-11-26 10:57:26

问题


As I am trying this with spring boot and webservices with postman chrome add-ons.

In postman content-type=\"multipart/form-data\" and I am getting the below exception.

HTTP Status 500 - Request processing failed; 
nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is java.io.IOException: 
org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

In Controller I specified the below code

@ResponseBody
@RequestMapping(value = \"/file\", headers = \"Content-Type= multipart/form-data\", method = RequestMethod.POST)

public String upload(@RequestParam(\"name\") String name,
        @RequestParam(value = \"file\", required = true) MultipartFile file)
//@RequestParam ()CommonsMultipartFile[] fileUpload
{
    // @RequestMapping(value=\"/newDocument\", , method = RequestMethod.POST)
    if (!file.isEmpty()) {
        try {
            byte[] fileContent = file.getBytes();
            fileSystemHandler.create(123, fileContent, name);
            return \"You successfully uploaded \" + name + \"!\";
        } catch (Exception e) {
            return \"You failed to upload \" + name + \" => \" + e.getMessage();
        }
    } else {
        return \"You failed to upload \" + name + \" because the file was empty.\";
    }
}

Here I specify the file handler code

public String create(int jonId, byte[] fileContent, String name) {
    String status = \"Created file...\";
    try {
        String path = env.getProperty(\"file.uploadPath\") + name;
        File newFile = new File(path);
        newFile.createNewFile();
        BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(newFile));
        stream.write(fileContent);
        stream.close();
    } catch (IOException ex) {
        status = \"Failed to create file...\";
        Logger.getLogger(FileSystemHandler.class.getName()).log(Level.SEVERE, null, ex);
    }
    return status;
}

回答1:


The problem is that you are setting the Content-Type by yourself, let it be blank. Google Chrome will do it for you. The multipart Content-Type needs to know the file boundary, and when you remove the Content-Type, Postman will do it automagically for you.




回答2:


Unchecked the content type in Postman and postman automatically detect the content type based on your input in the run time.




回答3:


This worked for me: Uploading a file via Postman, to a SpringMVC backend webapp:

Backend:

Postman:




回答4:


The "Postman - REST Client" is not suitable for doing post action with setting content-type.You can try to use "Advanced REST client" or others.

Additionally, headers was replace by consumes and produces since Spring 3.1 M2, see https://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements. And you can directly use produces = MediaType.MULTIPART_FORM_DATA_VALUE.




回答5:


I was having the same problem while making a POST request from Postman and later I could solve the problem by setting a custom Content-Type with a boundary value set along with it like this.

I thought people can run into similar problem and hence, I'm sharing my solution.




回答6:


when I use postman to send a file which is 5.6M to external network , I met the same trouble. (The same action is succeeded on my own computer and local testing environment.) After check all the server configs and http headers, I found that the reason is Postman may have some trouble simulate request to external http request. Finally, I did the sendfile request on chrome html page successfully. Just as a reference :)




回答7:


I met this problem because I use request.js which writen base on axios
And I already set a defaults.headers in request.js

import axios from 'axios'
const request = axios.create({
  baseURL: '', 
  timeout: 15000 
})
service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

here is how I solve this
instead of

request.post('/manage/product/upload.do',
      param,config
    )

I use axios directly send request,and didn't add config

axios.post('/manage/product/upload.do',
      param
    )

hope this can solve your problem



来源:https://stackoverflow.com/questions/36005436/the-request-was-rejected-because-no-multipart-boundary-was-found-in-springboot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!