Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

upload file springboot Required request part 'file' is not present

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,

like image 536
Wintern Avatar asked May 12 '17 11:05

Wintern


2 Answers

This is how your request in Postman should look like:

enter image description here

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>  //... 
like image 116
Tanmay Delhikar Avatar answered Sep 21 '22 17:09

Tanmay Delhikar


In your method you have specified like this
@RequestParam("file"). Hence it is expecting the key to be file. It is quite evident in the exception message. Use this name in the Key field in Postman when you upload file.
More information here integration test case and file upload

like image 36
pvpkiran Avatar answered Sep 23 '22 17:09

pvpkiran