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

JavaWeb ServicesFile UploadSpring BootMultifile Uploader

Java Problem Overview


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;
}

Java Solutions


Solution 1 - Java

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.

Solution 2 - Java

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

Sample

Solution 3 - Java

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

Backend: Endpoint controller definition

Postman: Headers setup POST Body setup

Solution 4 - Java

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.

postman

Solution 5 - Java

Heard you can do this in postman:

placeholders

Solution 6 - Java

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.

Solution 7 - Java

When I use postman to send a file which is 5.6M to an external network, I faced the same issue. The same action is succeeded on my own computer and local testing environment.

After checking all the server configs and HTTP headers, I found that the reason is Postman may have some trouble simulating requests to external HTTP requests. Finally, I did the sendfile request on the chrome HTML page successfully. Just as a reference :)

Solution 8 - Java

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

Solution 9 - Java

Newer versions of ARC(Advaced Rest client) also provides file upload option:

enter image description here

Solution 10 - Java

You can try with below simple code, it should work. I tested on Advanced REST Client and below attached screenshot will help for configuration.

package com.example.demo;

import java.io.FileOutputStream;
import java.io.IOException;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class ImageUploadController {

	@PostMapping("image-upload")
	public String uploadImage(@RequestParam MultipartFile myFile) throws IOException {
		
		byte[] bytes = myFile.getBytes();

		FileOutputStream fileOutputStream = new FileOutputStream("image.jpg");

		fileOutputStream.write(bytes);
		fileOutputStream.close();
		
		return "Image uploaded successfully..!";

	}
}

enter image description here

you can find uploaded image on below location in project.

enter image description here

Also please note that if your controller should be within the package of @SpringBootApplication package. You can refer below image.

enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMohammed JavedView Question on Stackoverflow
Solution 1 - Javade.la.ruView Answer on Stackoverflow
Solution 2 - JavaBalaView Answer on Stackoverflow
Solution 3 - JavagorjanzView Answer on Stackoverflow
Solution 4 - JavaReaz MurshedView Answer on Stackoverflow
Solution 5 - JavaBitzuView Answer on Stackoverflow
Solution 6 - JavatomeokinView Answer on Stackoverflow
Solution 7 - Javahao huangView Answer on Stackoverflow
Solution 8 - JavaHanzView Answer on Stackoverflow
Solution 9 - JavaSandeep KumarView Answer on Stackoverflow
Solution 10 - JavaMr.AView Answer on Stackoverflow