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`,

Original source

Related problems