wake-up-neo.net

Spring File Upload - 'Erforderlicher Anforderungsteil ist nicht vorhanden'

Ich versuche, die Anforderung POST an meinen Controller zu senden, kann jedoch keine Parameter in einem beliebigen Typ übergeben, es sei denn, ich entscheide mich für JSON. Mein Ziel ist es, einen String und eine Datei an meinen Controller zu übergeben. Ich erhalte jedoch weiterhin einen Required request part 'xxx' is not present-Fehler.

@RestController
public class ConfigurationController {
    @PostMapping(value = "/config")
    public ResponseEntity<?> saveEnvironmentConfig(@RequestParam("file") MultipartFile uploadfile){
        return ResponseEntity.ok().body(null);
    }
}

Ich kann keine Datei hier haben. Ähnlich, wenn ich versuche:

@RestController
public class ConfigurationController {
    @PostMapping(value = "/config")
    public ResponseEntity<?> saveEnvironmentConfig(@RequestParam("name") String name){
        return ResponseEntity.ok().body(null);
    }
}

das gleiche kann ich hier nicht nennen. 

Ich sende eine Anfrage per Postman, wie im folgenden Screenshot dargestellt:

 Postman Request

 Postman Request 2

Der einzige Header-Tag ist für die Autorisierung. Ich habe keinen Content-Type-Header, ich habe versucht, multipart/form-data hinzuzufügen, half aber nicht.

Der String-Parameter kann nur durch Hinzufügen zu URL übergeben werden. Also folgt http://localhost:8080/SearchBox/admin/config?name=test, aber das ist nicht was ich will. Ich möchte String- und File-Parameter im Body-Teil. 

Ich habe auch über CURL getestet:

curl -X POST -H "Authorization:Bearer myToken" -H "Content-Type:Multipart/form-data" http://localhost:8080/SearchBox/admin/config --data 'pwd=pwd'
curl -X POST -H "Authorization:Bearer myToken"http://localhost:8080/SearchBox/admin/config --data 'pwd=pwd'
curl -H "Authorization:Bearer myToken" -F [email protected]"/g123.conf" http://localhost:8080/SearchBox/admin/config

Hinweis: Ich habe ähnliche Beiträge bereits geprüft, aber nicht geholfen Dies , Dies , Dieses

5

Ich habe das Problem endlich gelöst und meine Lösung geteilt, falls jemand anderes das gleiche Problem hat. 

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

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        return new MultipartConfigElement("");
    }

    @Bean
    public MultipartResolver multipartResolver() {
        org.springframework.web.multipart.commons.CommonsMultipartResolver multipartResolver = new org.springframework.web.multipart.commons.CommonsMultipartResolver();
        multipartResolver.setMaxUploadSize(1000000);
        return multipartResolver;
    }
    @PostMapping(value = "/config", consumes = "multipart/form-data")
    public ResponseEntity<?> saveEnvironmentConfig(@RequestParam("password") String password, @RequestParam("file") MultipartFile submissions)
            throws AdminAuthenticationException, ConfigurationException {
        return ResponseEntity.ok().body(null);
    }
}
9
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ResponseEntity<?> upload(@RequestParam(value = "name") String 
name,@RequestParam(value = "file") MultipartFile file){
    // TODO check file is not null and save 
    return new ResponseEntity<>(HttpStatus.valueOf(200));;
}

 enter image description here

2
baba

Ich vermute, dass der Hauptgrund @RequestParam ("Datei") ist Es sollte stattdessen @RequestBody geben.

1

In meiner Falllösung fehlte die Anmerkung '@EnableWebMvc' zur Konfiguration

@EnableWebMvc
@Configuration
internal class BulkOffersUploadConfig {

    @Bean
    fun multipartResolver(): MultipartResolver {
        val multipartResolver = CommonsMultipartResolver()
        multipartResolver.setMaxUploadSize(1000)
        multipartResolver.setMaxUploadSizePerFile(1000)
        return multipartResolver
    }
}
0
Aik

Wenn Sie diese Frage nicht gefunden haben und keine der oben genannten Lösungen für Sie geeignet war, überprüfen Sie die Kopfzeilen Ihres Postboten. Wenn der Header "Content-Type" gesetzt ist, kann dies den obigen Fehler verursachen.

Entfernen Sie den "Content-Type" -Header, um das oben genannte Problem zu beheben.

Siehe diese Frage für weitere Informationen:

Postman: Erforderlicher Anforderungsteil "Datei" ist nicht vorhanden

0
drew

Bean zur Config-Datei hinzufügen.

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(-1);
    return multipartResolver;

}
0
Mahendra Sri

Berücksichtigen Sie auch die Möglichkeit, dass Ihr Anforderungshauptteil Ihren Server nicht erreicht, wenn er einen Proxy oder einen anderen Vermittler durchführt, der möglicherweise keine Multipart-/Formulardaten- oder gar Octet-Stream-Inhaltstypen unterstützt. Hoffentlich kann dies mit einer zusätzlichen Konfiguration gelöst werden, um diese Art von Anfragen zu bearbeiten. Ich kann Ihnen auch empfehlen, einen Request Interceptor zu konfigurieren, damit Sie Ihre Anfrage vor und nach Ihrem Controller protokollieren können. Dies kann Ihnen helfen, einen Einblick in die Anforderungsparameter, die Payload und die Header zu bekommen. In meinem Fall wurde mir klar, dass die Größe meines Anfragetextes 0 war. Dies half mir zu erkennen, was diesen Fehler verursachte, und war nicht meine Federkonfiguration. Hier Ich hinterlasse eine nützliche Ressource, die Ihnen beim Abfangen der Protokollierung hilft, die Spring außerhalb der Box hat. Linkbeschreibung hier eingeben

0
darkconeja