Postman: Required file section of request part missing

I wanted to upload the image to my Rest API through the postman. I am using Spring Boot Framework. Here is a screenshot:

enter image description here

I also did not set any headers, as I found in the other answers, as this gave a multi-element border error.

Below is the code of my controller:

package com.practice.rest.assignment1.controller;

import java.io.IOException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.practice.rest.assignment1.model.Product;
import com.practice.rest.assignment1.service.CatalogueService;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

@RestController
@RequestMapping("/CatalogueController/")
public class CatalogueController{

    @Autowired
    private CatalogueService catalogueService;

    @RequestMapping(value = "addProduct", method = RequestMethod.POST , consumes = "multipart/form-data")
    public Product addProduct(@RequestParam String productJson, @RequestParam MultipartFile file) throws JsonParseException, JsonMappingException, IOException {


        Product product = new ObjectMapper().readValue(productJson, Product.class);
        byte[] mediaBytes = file.getBytes();
        product.setImage(mediaBytes);
        return catalogueService.saveInDb(product);

    }

}

Now I take the Product object, which internally consists of an image defined as a byte [] array. I take this as a line and an image separately as a Multipart file.

My product class attributes are defined below:

    private Long pId;
    private String model;
    private String brand;
    private byte[] image; // This is where I want the image to save
    private Long price;
    private String currency;
    private String transmissionType;
    private String fuelType;

Since I am using spring loading, here is my main class:

package com.practice.rest.assignment1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class App {

  public static void main(String[] args) {
      SpringApplication.run(App.class, args);  
  }

}

I get an error message:

{
  "timestamp": 1478611635977,
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.web.multipart.support.MissingServletRequestPartException",
  "message": "Required request part 'file' is not present",
  "path": "/CatalogueController/addProduct"
}

Where am I wrong?

+6
6

, JSON, . postman " . , ", JSON ( JSON - ) '( ).

+1

'Content-Type: multipart/form-data...', . .

+4

, application.properties:

spring.http.multipart.enabled=true 
spring.http.multipart.location= /upload
+2

@Breaking Benjamin , :

curl 'http://localhost:9999/api/v1/upload' -H 'Pragma: no-cache' -H 'Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundary0ae4CymwYLjdqdI1' -H 'Accept: */*' -H 'Cache-Control: no-cache' -H 'Cookie: _ga=GA1.1.433565887.1474948752' -H 'Connection: keep-alive' -H 'DNT: 1' --data-binary $'------WebKitFormBoundary0ae4CymwYLjdqdI1\r\nContent-Disposition: form-data; name="file"; filename="228cb73.jpg"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary0ae4CymwYLjdqdI1\r\nContent-Disposition: form-data; name="a"\r\n\r\n123\r\n------WebKitFormBoundary0ae4CymwYLjdqdI1--\r\n' --compressed

, :

@RequestMapping(method = RequestMethod.POST)
    public ResponseEntity handleUpload(
            @RequestParam("a")String a,
            @RequestParam("file") MultipartFile multipartFile) throws IOException {

        System.out.println(a);
        ...

a:

param a output

json :

curl 'http://localhost:9999/api/v1/upload' -H 'Pragma: no-cache' -H 'Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBTudL55M6S8ENLVt' -H 'Accept: */*' -H 'Cache-Control: no-cache' -H 'Cookie: _ga=GA1.1.433565887.1474948752' -H 'Connection: keep-alive' -H 'DNT: 1' --data-binary $'------WebKitFormBoundaryBTudL55M6S8ENLVt\r\nContent-Disposition: form-data; name="file"; filename="228cb73.jpg"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundaryBTudL55M6S8ENLVt\r\nContent-Disposition: form-data; name="a"\r\n\r\n"{"key":"value"}"\r\n------WebKitFormBoundaryBTudL55M6S8ENLVt--\r\n' --compressed

, , curl , , , .

+1

application.properties spring.http.multipart.enabled = true

@PostMapping(value = "/console")
public ResponseEntity<RxConsoleDTO> addRxConsole(@RequestParam("attachment") MultipartFile attachmentFile,  @RequestParam("type") String type) throws IOException {// your logic}

enter image description here

+1

, , , , .

upload.file.extensions = JPG, JPEG, GIF, PNG

0

Source: https://habr.com/ru/post/1660191/


All Articles