问题
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