upload file springboot Required request part 'file' is not present
java, postman, spring-boot, spring-restcontroller, upload
Solution
This is how your request in Postman should look like:
My sample code:
application.properties
#max file and request size
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=11MB
Main Application Class:
Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Rest controller class:
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping("/fileupload")
public class MyRestController {
@RequestMapping(value = "/file", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String myService(@RequestParam("file") MultipartFile file,
@RequestParam("id") String id) throws Exception {
if (!file.isEmpty()) {
//your logic
}
return "some json";
}
}
pom.xml
//...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
....
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
//...
Problem
I want to add an upload function to my spring boot application; this is my upload Rest Controller ``` package org.sid.web; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.util.LinkedMultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.sid.entities.FileInfo; @RestController public class UploadController { @Autowired ServletContext context; @RequestMapping(value = "/fileupload/file", headers = ("content-type=multipart/*"), method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<FileInfo> upload(@RequestParam("file") MultipartFile inputFile) { FileInfo fileInfo = new FileInfo(); HttpHeaders headers = new HttpHeaders(); if (!inputFile.isEmpty()) { try { String originalFilename = inputFile.getOriginalFilename(); File destinationFile = new File( context.getRealPath("C:/Users/kamel/workspace/credit_app/uploaded") + File.separator + originalFilename); inputFile.transferTo(destinationFile); fileInfo.setFileName(destinationFile.getPath()); fileInfo.setFileSize(inputFile.getSize()); headers.add("File Uploaded Successfully - ", originalFilename); return new ResponseEntity<FileInfo>(fileInfo, headers, HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<FileInfo>(HttpStatus.BAD_REQUEST); } } else { return new ResponseEntity<FileInfo>(HttpStatus.BAD_REQUEST); } } } ``` but when testing this in postman with inserting http://localhost:8082/fileupload/file and adding a file to the body i got this error: "exception": `org.springframework.web.multipart.support.MissingServletRequestPartException", "message": "Required request part 'file' is not present`,