MultipartException: Die aktuelle Anfrage ist keine mehrteilige Anfrage

Lesezeit: 4 Minuten

Benutzeravatar von Sal-laS
Sal-laS

Ich versuche, einen erholsamen Controller zum Hochladen von Dateien zu erstellen. Ich habe das gesehen und diesen Controller gemacht:

@RestController
public class MaterialController {

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public String handleFileUpload(
            @RequestParam("file") MultipartFile file){
        String name = "test11";
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }
}

und dann habe ich postman verwendet, um ein pdf zu senden:

Geben Sie hier die Bildbeschreibung ein

Aber der Server stürzt ab mit dem Fehler:

.MultipartException: Current request is not a multipart request

Wieder habe ich das gefunden und a hinzugefügt bean.xml Datei

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>
</beans>

Bedauerlicherweise, es beschwert sich immer noch mit dem gleichen Fehler.

  • Ich weiß nicht, ob es Ihr Problem verursacht, aber der Screenshot zeigt, dass Sie das nicht benannt haben Teil. Entsprechend deinem handleFileUpload() Methode, müssen Sie die geben Teil ein Name/Schlüsselwert von file. Ohne ein Teil name, es hat wahrscheinlich nichts an den Server gesendet, und “nothing” = “not multipart”.

    –Andreas

    2. Februar 2017 um 22:23 Uhr


  • Nein, Sie sollten kein Verzeichnis erstellen müssen.

    –Andreas

    2. Februar 2017 um 22:27 Uhr

  • Unabhängig: Da hast du Klasse mit annotiert @RestControllermüssen Sie die Methode nicht mit annotieren @ResponseBody. Siehe javadoc: docs.spring.io/spring/docs/current/javadoc-api/org/…

    –Andreas

    2. Februar 2017 um 22:29 Uhr

Wenn Sie Postman für mehrteilige Anforderungen verwenden, geben Sie keinen benutzerdefinierten Inhaltstyp im Header an. Ihre Kopfzeile in Postman sollte also leer sein. Postman bestimmt die Formulardatengrenze. Auf der Registerkarte Body von Postman sollten Sie Formulardaten und den Dateityp auswählen. Eine entsprechende Diskussion finden Sie unter https://github.com/postmanlabs/postman-app-support/issues/576

  • Ich habe dich nicht verstanden. Können Sie ein Bild der richtigen Anfrage im Postboten senden?

    – Sal-laS

    3. Februar 2017 um 12:09 Uhr

  • Überprüfen Sie die Registerkarte Header direkt vor der Registerkarte Body in Postman. Ihre Anfrage ist korrekt, aber es gibt einen Eintrag in Headers, da das von Ihnen geteilte Bild Headers(1) zeigt. Eintrag dort entfernen.

    – abaghel

    3. Februar 2017 um 12:12 Uhr

Es sieht so aus, als ob das Problem darin besteht, dass die Anfrage an den Server keine mehrteilige Anfrage ist. Grundsätzlich müssen Sie Ihr clientseitiges Formular ändern. Zum Beispiel:

<form action="..." method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
</form>

Hoffe das hilft.

  • Es ist eine Restanwendung, derzeit gibt es kein HTML für die Clientseite. Ich benutze Postbote

    – Sal-laS

    2. Februar 2017 um 22:11 Uhr

  • @SalmanLashkarara, Sie können es immer noch in den Kopfzeilen Ihres Rest-Clients hinzufügen.

    – Sandeep Kumar

    15. Dezember 2019 um 9:10 Uhr

Benutzeravatar von Nilesh Kumar
Niles Kumar

Ich stand auch vor dem gleichen Problem mit Postman für multipart. Ich habe es behoben, indem ich die folgenden Schritte ausführte:

  • Nicht auswählen Content-Type im Headers Abschnitt.
  • In Body Registerkarte von Postman solltest du auswählen form-data und auswählen file type.

Es hat für mich funktioniert.

Das ist mir einmal passiert: Ich hatte eine einwandfrei funktionierende Postman-Konfiguration, aber dann, ohne etwas zu ändern, obwohl ich das nicht mitgeteilt habe Content-Type manuell auf Postman funktionierte es nicht mehr; Nach den Antworten auf diese Frage habe ich versucht, den Header zu deaktivieren und ihn von Postman automatisch hinzufügen zu lassen, aber keine der Optionen hat funktioniert.

Am Ende löste ich es, indem ich zu ging Body ändern Sie den Parametertyp von File Zu Textdann zurück zu File und dann erneutes Auswählen der zu sendenden Datei; irgendwie hat es damit wieder funktioniert. Riecht wie ein Postman-Bug, in diesem speziellen Fall vielleicht?

Fügen Sie in application.properties Folgendes hinzu:

spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
spring.http.multipart.enabled=false

und in Ihrem HTML-Formular benötigen Sie ein: enctype="multipart/form-data". Zum Beispiel:

<form method="POST" enctype="multipart/form-data" action="https://stackoverflow.com/">

Ich hoffe das hilft!

  • „spring.http.multipart.enabled“ ist veraltet. Bitte verwenden Sie ‘spring.servlet.multipart.enabled’.

    – horvoje

    22. Februar 2022 um 10:22 Uhr

  • Möchten Sie das ‘enabled’-Flag wirklich auf ‘false’ setzen?

    – horvoje

    22. Februar 2022 um 10:23 Uhr

Benutzeravatar von KayV
KayV

Überprüfen Sie die Datei, die Sie in der Anfrage ausgewählt haben.

Bei mir wurde der Fehler angezeigt, weil die Datei nicht im System vorhanden war, da ich die Anforderung von einem anderen Computer importiert habe.

  • „spring.http.multipart.enabled“ ist veraltet. Bitte verwenden Sie ‘spring.servlet.multipart.enabled’.

    – horvoje

    22. Februar 2022 um 10:22 Uhr

  • Möchten Sie das ‘enabled’-Flag wirklich auf ‘false’ setzen?

    – horvoje

    22. Februar 2022 um 10:23 Uhr

Benutzeravatar von mzhehalo
mzhehalo

In meinem Fall ich ENTFERNT:

‘Inhaltstyp’: ‘application/json’,

Von meinem Abfangjägerund alles funktioniert.

     intercept(httpRequest: HttpRequest<any>, httpHandler: HttpHandler): Observable<HttpEvent<any>> {
if (this.authService.isUserLoggedIn() && httpRequest.url.indexOf('login') === -1) {
  const authReq = httpRequest.clone({
    headers: new HttpHeaders({
    'Content-Type': 'application/json',
      Authorization: this.authService.getBasicAuth()
    })
  });
  return httpHandler.handle(authReq);
} else {
  return httpHandler.handle(httpRequest);
}}

1449770cookie-checkMultipartException: Die aktuelle Anfrage ist keine mehrteilige Anfrage

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy